Gitlab触发Jenkins部署(deploy)构建和手动回滚(rollback)构建--根据构建号回滚

本例声明

本例中的物料:

1.Jenkins   docker容器版

2.Gitlab  docker容器版

3.springboot项目

4.maven构建

本例中的特殊术语:

“部署构建”:用于部署的构建,这种构建会在Gitlab中下拉master分支中的最新的代码,然后使用maven进行的构建并发布到生产环境。

“回滚构建”:用于回滚的构建,根据构建号进行回滚,Jenkins会取出备份的文件,然后将其发布到生产环境。

本例中的“部署构建”条件:

在分支合并到master的请求经过研发经理审批以后merge的瞬间进行“部署构建”

如果发布后出现bug,可以手工回滚到指定的构建版本

本例配置

使用gitlab触发Jenkins构建的步骤不再赘述,请大家参考:

GitLab触发jenkins构建项目

基于gitlab和jenkins的自动化部署实例

下面我们重点讲一下Jenkins配置:

有时候我们发布完成后发现有很大的bug需要马上回滚到上一个版本:

在Jenkins中“新建任务”-->"构建一个自由风格的软件项目"在项目的。

在项目配置的“General”--“参数化构建”

1.添加选项参数

名称:

deploy_evt

选项:

deploy

rollback

描述:

deploy:发布,rollback:回滚

2.添加字符参数

名称:

buildNum

默认值:

0

描述:

需要回滚到的构建号,发布时忽略该参数

Gitlab触发Jenkins部署(deploy)构建和手动回滚(rollback)构建--根据构建号回滚_第1张图片

 

源码管理:

Gitlab触发Jenkins部署(deploy)构建和手动回滚(rollback)构建--根据构建号回滚_第2张图片

 

构建触发器:

我使用的是在分支代码合并到master然后在合并申请接受后的情况下才出发构建,所以不选push事件:

Gitlab触发Jenkins部署(deploy)构建和手动回滚(rollback)构建--根据构建号回滚_第3张图片

构建环境

选择输出时间戳:

Gitlab触发Jenkins部署(deploy)构建和手动回滚(rollback)构建--根据构建号回滚_第4张图片

构建(最关键发部分):

Gitlab触发Jenkins部署(deploy)构建和手动回滚(rollback)构建--根据构建号回滚_第5张图片

脚本:

case $deploy_evt in
	deploy)
    	echo "deploy:$deploy_evt"
        /var/jenkins_home/maven/apache-maven-3.6.1/bin/mvn -s /var/jenkins_home/maven/apache-maven-3.6.1/conf/settings.xml clean install -Dmaven.test.skip=true
        path="${WORKSPACE}/bak"
   		 if [ -d $path ];
    		then
       		 echo "The files is already  exists "
   		 else
       		 mkdir -p  $path
   		 fi
    	cd ${WORKSPACE}
        rm -rf *.tar.gz
   		  tar czf bak/${JOB_NAME}-${BUILD_NUMBER}.tar.gz target/*.jar --exclude=bak
    		find $path  -mtime 2 -name "*.tar.gz"  -exec rm -rf {} \;
    		echo "Deployment Completed!"
    	;;
    rollback)
    	echo  "rollback:$deploy_evt"
        echo "buildNum:"$buildNum
        rm -rf target
        cd ${WORKSPACE}
        rm -rf *.tar.gz
        if [ -f bak/${JOB_NAME}-$buildNum.tar.gz ];
        then
        	cp bak/${JOB_NAME}-$buildNum.tar.gz ${WORKSPACE}
        	tar -zxvf ${JOB_NAME}-$buildNum.tar.gz
        	echo  "Rollbacked To build Number:$buildNum"
        	pwd && ls
        else
        	echo  "------------------------------------------------------------------------------------------------------------------------------ "
        	echo  "------------------------------------------------------------------------------------------------------------------------------ "
            echo  "------------------------------------------------------------------------------------------------------------------------------ "
            echo  "------------------------------------------------------------------------------------------------------------------------------ "
        	echo  "Build Number $buildNum is a Rollback build number ;Please chose a deploy build number!"
            echo  "------------------------------------------------------------------------------------------------------------------------------ "
            echo  "------------------------------------------------------------------------------------------------------------------------------ "
            echo  "------------------------------------------------------------------------------------------------------------------------------ "
            echo  "------------------------------------------------------------------------------------------------------------------------------ "

            cp bak/${JOB_NAME}-$buildNum.tar.gz ${WORKSPACE}
        fi
        ;;
        *)
        exit
        	;;
esac
        

注:

1.apache-maven-3.6.1这个是自己安装的(因为是绿色版,复制进容器然后解压缩)。

2.思路在“发布构建”的时候将spring生成的jar包进行打包(根据构建号打包)并放在项目bak(自己新建的一个文件夹)的文件夹下面;

回滚的时候将对应的构建号的压缩包拿出来解压。然后部署生产环境;

3.由于这里有两种构建方式:“部署构建”和“回滚构建”,我们在回滚的时候需要选择“部署构建”的构建号,如果回滚的时候选择“回滚构建”的构建号是不能成功构建的。这种情况的构建失败有以下提示信息:

Gitlab触发Jenkins部署(deploy)构建和手动回滚(rollback)构建--根据构建号回滚_第6张图片

 

构建后操作:发布到生产环境

Gitlab触发Jenkins部署(deploy)构建和手动回滚(rollback)构建--根据构建号回滚_第7张图片

这样在构建完成后可以将程序发布到服务器:

startjk-rtd.sh

#!/bin/bash
chmod 777 /home/zhangsan/abc/abc-1.0.0-SNAPSHOT.jar
echo "开始启动......"
nohup java -jar abc-1.0.0-SNAPSHOT.jar > /dev/null &
echo "启动成功!"

stopjk-rtd.sh

#!/bin/bash
echo "stop SpringBoot abc Application"
pid=`ps -ef | grep abc-1.0.0-SNAPSHOT.jar | grep -v grep | awk '{print $2}'`
echo  "应用进程id:$pid"
if [ -n "$pid" ]
then
kill -9 $pid
echo "停止成功!"
fi

 

Gitlab侧:

Gitlab触发Jenkins部署(deploy)构建和手动回滚(rollback)构建--根据构建号回滚_第8张图片

关于1和2处的信息在Jenkins的触发构建中找到:

Gitlab触发Jenkins部署(deploy)构建和手动回滚(rollback)构建--根据构建号回滚_第9张图片

这样就可以实现合并成功后发布了。

构建的使用

一、gitlab自动构建

在分支合并到master的请求经过研发经理审批以后merge的瞬间进行自动“部署构建”。

二、手动“部署构建”

点击项目,选择“Build with Parameters”

deploy_evt下拉菜单选择deploy

buildNum 参数忽略不写

Gitlab触发Jenkins部署(deploy)构建和手动回滚(rollback)构建--根据构建号回滚_第10张图片

击“开始构建”即可。

三、手动“回滚构建”

点击项目,选择“Build with Parameters”

deploy_evt下拉菜单选择rollback

buildNum选择需要回滚到的构建号,

Gitlab触发Jenkins部署(deploy)构建和手动回滚(rollback)构建--根据构建号回滚_第11张图片

比如上图的构建号是:45

Gitlab触发Jenkins部署(deploy)构建和手动回滚(rollback)构建--根据构建号回滚_第12张图片

点击开始构建,回滚构建完成!

 

 

 

 

 

 

 

你可能感兴趣的:(Linux,Gitlab,Jenkins)