一、目的
在Jenkins的应用中,根据构建的版本号(Build Version) 进行回滚代码,实现思路为:
在中间服务器(Jenkisn服务器)中把项目打包之后,按照构建版本号备份包,在回滚的时候按照版本号去寻找相应的包,发送到目标服务器。
二、构建不可回滚项目
此次配置脱胎于之前的不可回滚项目,因此是在之前配置的基础上进行改造的,不可回滚的项目详细见:https://www.cnblogs.com/dyaqi/p/13153127.html, 同学们可以结合两篇文章灵活配置,实现自己的目的。
三、改造为可回滚项目
1、General-添加参数
添加在构建时可进行选择的参数和展示的字符参数。
2、构建环境
去掉勾选“Delete workspace before build starts”,不删除。
3、构建-1
clean compile package -Dmaven.test.skip=true -Ptest
清除target目录,编译、打包项目;
-Dmaven.test.skip=true为不执行测试用例也不编译测试用例类;
-Ptest为触发配置文件。
此处详细知识可见附1 。
4、构建-2
case $Status in
Deploy)
echo "Status:$Status"
path="${WORKSPACE}/bak/${BUILD_NUMBER}" #创建每次要备份的目录
if [ -d $path ];
then
echo "The files is already exists "
else
mkdir -p $path
fi
cp -f ${WORKSPACE}/target/*.war $path #将打包好的war包备份到相应目录,覆盖已存在的目标
echo "Completing!"
;;
Rollback)
echo "Status:$Status"
echo "Version:$Version"
cd ${WORKSPACE}/bak/$Version #进入备份目录
cp -f *.war ${WORKSPACE}/target/ #将备份拷贝到程序打包目录中,并覆盖之前的war包
;;
*)
exit
;;
esac
执行完该段脚本后,会在Jenkins服务器中的WORKSPACE下创建bak目录,用来存放备份文件,如图:
5、构建-3
ReservedNum=5 #保留文件数
FileDir=${WORKSPACE}/bak/
date=$(date "+%Y%m%d-%H%M%S")
cd $FileDir #进入备份目录
FileNum=$(ls -l | grep '^d' | wc -l) #当前有几个文件夹,即几个备份
while(( $FileNum > $ReservedNum))
do
OldFile=$(ls -rt | head -1) #获取最旧的那个备份文件夹
echo $date "Delete File:"$OldFile
rm -rf $FileDir/$OldFile
let "FileNum--"
done
此段代码为在每次构建的时候,检查备份个数是否超过5个,假如超过5个,则清除老的备份,所以只能回滚5个版本以内的代码。
6、构建后操作
只改变“Delete workspace when build is done”,去掉Success的勾选,是指成功(Success)构建之后的文件不删除。
四、发布
回到项目主界面,点击Build with Parameters
发布选择Deploy--->开始构建,即可开始发布
回滚选择Rollback--->输入回滚版本---->开始构建,版本号从构建历史中选择一个输入
附1
1.maven clean。
清理项目的target目录
2.maven compile
编译项目
3.maven test
编译项目后,再执行Junit测试方法
4.maven package
编译项目后,再执行Junit测试方法,再把项目打包到target目录
5.maven install
编译项目后,再执行Junit测试方法,再把项目打包到target目录,再安装到本地仓库。