本例声明
本例中的物料:
1.Jenkins docker容器版
2.Gitlab docker容器版
3.springboot项目
4.maven构建
本例中的特殊术语:
“部署构建”:用于部署的构建,这种构建会在Gitlab中下拉master分支中的最新的代码,然后使用maven进行的构建并发布到生产环境。
“回滚构建”:用于回滚的构建,根据构建号进行回滚,Jenkins会取出备份的文件,然后将其发布到生产环境。
本例中的“部署构建”条件:
在分支合并到master的请求经过研发经理审批以后merge的瞬间进行“部署构建”
如果发布后出现bug,可以手工回滚到指定的构建版本
本例配置
使用gitlab触发Jenkins构建的步骤不再赘述,请大家参考:
下面我们重点讲一下Jenkins配置:
有时候我们发布完成后发现有很大的bug需要马上回滚到上一个版本:
在Jenkins中“新建任务”-->"构建一个自由风格的软件项目"在项目的。
在项目配置的“General”--“参数化构建”
1.添加选项参数
名称:
deploy_evt
选项:
deploy
rollback
描述:
deploy:发布,rollback:回滚
2.添加字符参数
名称:
buildNum
默认值:
0
描述:
需要回滚到的构建号,发布时忽略该参数
源码管理:
构建触发器:
我使用的是在分支代码合并到master然后在合并申请接受后的情况下才出发构建,所以不选push事件:
构建环境
选择输出时间戳:
构建(最关键发部分):
脚本:
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.由于这里有两种构建方式:“部署构建”和“回滚构建”,我们在回滚的时候需要选择“部署构建”的构建号,如果回滚的时候选择“回滚构建”的构建号是不能成功构建的。这种情况的构建失败有以下提示信息:
构建后操作:发布到生产环境
这样在构建完成后可以将程序发布到服务器:
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侧:
关于1和2处的信息在Jenkins的触发构建中找到:
这样就可以实现合并成功后发布了。
构建的使用
一、gitlab自动构建
在分支合并到master的请求经过研发经理审批以后merge的瞬间进行自动“部署构建”。
二、手动“部署构建”
点击项目,选择“Build with Parameters”
deploy_evt下拉菜单选择deploy
buildNum 参数忽略不写
击“开始构建”即可。
三、手动“回滚构建”
点击项目,选择“Build with Parameters”
deploy_evt下拉菜单选择rollback
buildNum选择需要回滚到的构建号,
比如上图的构建号是:45
点击开始构建,回滚构建完成!