欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

jenkin配置gitlab持续化构建Spring Cloud微服务

程序员文章站 2022-03-08 14:00:33
...

前言:由于公司部分项目采用的是spring cloud微服务,然后我选择了使用gitlab和jenkins持续化集成和自动发布服务。经过长时间的使用,感觉还是非常的方便,特此分享一下自己的配置和脚本。

1、先创建jenkins的item

jenkin配置gitlab持续化构建Spring Cloud微服务       

        创建一个任务名,选择构建多配置项目。 

2.配置项目

    --添加描述,选择Discard old builds 保持最大构建数,输入自己需要保留的构建记录。根据自己需求随意输入,输入以后就会根据数字保留相应的构建记录 

jenkin配置gitlab持续化构建Spring Cloud微服务

    --添加构建时使用的参数

    我添加的参数有:

    branch:类型:(String Parameter),需要构建的分支名称,构建时会选择此分支进行打包发布

    repackage: 类型:(Boolean Parameter),是否需要重新打包项目,默认是,一般部署项目都需要重新打包,如果仅仅是重启,则在启动时取消选中即可。

    restart:类型:(Boolean Parameter),是否需要重启,默认是,一般部署项目即是启动项目,如果仅仅是打包的话,可以在启动是取消选中即可。

    HTY_SERVICE:类型(Choice Parameter),选择需要部署的服务,将所有服务的application-name的名称,复制到这里面,部署项目的时候进行选择。

    tar_service_port:类型(Multi-line String Parameter),参数格式是:服务名:端口号:IP:包名,这样可以从shell脚本中读取你选中的服务名,部署到哪个ip,端口号是多少,打包以后的包名是什么,方便进一步部署服务。

jenkin配置gitlab持续化构建Spring Cloud微服务 jenkin配置gitlab持续化构建Spring Cloud微服务

3.源码管理

    --源码管理选择Git, Repository URL输入项目的gitlab地址,点击添加,配置git的用户名和密码,配置用户名和密码是只需要输入用户名和密码,其他输入框可以不用管。然后选择你的用户名和密码。输入分支变量:*/${branch},匹配刚刚的branch变量值。方便拉取分支。

jenkin配置gitlab持续化构建Spring Cloud微服务 4.构建,选择执行Excute Shell,输入写好的脚本 

jenkin配置gitlab持续化构建Spring Cloud微服务

脚本如下,仅供参考:

#!/bin/bash 
BUILD_ID=dontKillMe
elastic=htlb-elasticsearch-service
echo "********************部署开始********************"
if $repackage; then
		for  SER_PORT_IP in $(echo $tar_server_port) ; do
            SERVICE_NAME=$(echo $SER_PORT_IP | cut -f 1 -d ':' )
            SERVICE_PORT=$(echo $SER_PORT_IP | cut -f 2 -d ':' )
            SERVER_IP=$(echo $SER_PORT_IP | cut -f 3 -d ':' )
            JAR_NAME=$(echo $SER_PORT_IP | cut -f 4 -d ':' )
            if [[ "$HTY_SERVICE" == "$SERVICE_NAME" || "$HTY_SERVICE" == "all" ]]; then
            	echo "********************$SERVICE_NAME部署打包开始********************"
                mvn clean package -Dmaven.test.skip=true -pl "${SERVICE_NAME}" -am
                scp -P22 $SERVICE_NAME/target/$JAR_NAME.jar aaa@qq.com:/root/home/deployer/projects
                echo "********************$SERVICE_NAME部署打包结束********************"
            fi
        done
fi
if $restart; then
        if [ $HTY_SERVICE = $elastic ]; then
            echo "current service is htlb-elasticsearch-service"
            ssh aaa@qq.com "sh /root/elastic.sh stop"
        fi
        for  SER_PORT_IP in $(echo $tar_server_port) ; do
            SERVICE_NAME=$(echo $SER_PORT_IP | cut -f 1 -d ':' )
            SERVICE_PORT=$(echo $SER_PORT_IP | cut -f 2 -d ':' )
            SERVER_IP=$(echo $SER_PORT_IP | cut -f 3 -d ':' )
            JAR_NAME=$(echo $SER_PORT_IP | cut -f 4 -d ':' )
            if [[ "$HTY_SERVICE" == "$SERVICE_NAME" || "$HTY_SERVICE" == "all" ]]; then
            	echo "********************$SERVICE_NAME部署服务开始********************"
                echo "scp /root/home/deployer/projects/${JAR_NAME}.jar aaa@qq.com${SERVER_IP}:/root/home/deployer/projects";
                scp /root/home/deployer/projects/${JAR_NAME}.jar aaa@qq.com${SERVER_IP}:/root/home/deployer/projects
                echo "scp complete!"
                ssh aaa@qq.com${SERVER_IP} "mkdir -p /root/home/deployer/workspace/${SERVICE_NAME}-${SERVICE_PORT} && cp /root/home/deployer/projects/${JAR_NAME}.jar /root/home/deployer/workspace/${SERVICE_NAME}-${SERVICE_PORT}/app.jar && curl -fsSL http://127.0.0.1/deployJar.sh | bash -s -- -t/root/home/deployer/workspace/${SERVICE_NAME}-${SERVICE_PORT}/app.jar -p${SERVICE_PORT} -a-Dspring.profiles.active=test -l -f/var/log/deployer/service/${SERVICE_NAME}.log"
                echo "********************$SERVICE_NAME部署服务结束********************"
            fi
            if [ "$HTY_SERVICE" == "all" ]; then
                sleep 5
            fi
        done
        if [ $HTY_SERVICE = $elastic ]; then
            echo "current service is htlb-elasticsearch-service"
            sleep 10
            ssh aaa@qq.com "sh /root/elastic.sh restart"
        fi
fi
echo "********************部署结束********************"

 代码部分解释:es服务单独判断是由于es启动的时候失败了,需要先停掉es的节点,启动成功以后再启动es节点。所以写了个脚本去操作。

all变量是当初想要一键启动所有服务,但是由于服务越来越多,一键启动的话风险太大,所以还是老老实实该启动啥就启动啥吧。

代码中有一段需要执行的shell脚本。http://127.0.0.1/deployJar.sh,里面就是一些普通脚本,判断服务端口,杀掉以后进程,已经重启服务的,也是该配置的核心,我就不放出来。需要的朋友可以私我哈。关注公众号:FOSSspace,联系我哈。如果有困难,也可以帮你参考一下。

相关标签: java从入门到放弃