之前的文章中已经说过怎么进行发布,但没有写怎么回滚,那么这篇文章会介绍两种回滚方式。
- 通过git来回滚
- 通过发布时备份,回滚时选定备份文件进行回滚
第一种,使用gogs做源代码管理,java项目的栗子如下:
为来更好的理解我下面的操作,先看流程图,这是一个线上生产的一个发布过程
1.1 先选择一个mavn项目
1.2 配置如下:
1.2.1 设置构建历史保留数量(general => 丢弃旧的构建),我设置为保留最近30个,防止磁盘空间被撑爆
1.2.2 设置参数化构建过程
其中选项参数是下拉框的,字符参数是文本框
1.2.3 设置源码管理
Repository URL为项目仓库url
Credentials为下载这个仓库的账号密码
Branch Specifier 为分支
1.2.4 设置构建前的脚本,注意是做build前的pre steps中执行的shell脚本,该脚本是确认是否回滚,如果回滚的话调用回滚命令
case $Status in
Rollback)
echo "-----本次操作为回滚,版本号为$Version-----"
git reset --hard $Version
echo "-----回滚完成,打包中-----"
;;
*)
exit
;;
esac
1.2.5 设置build,mavn构建时依赖该配置文件,该配置文件为java项目中的配置
1.2.6,jenkins服务器构建好后再调用一个python脚本去执行负载均衡的关闭,不需要的可以不调用
1.2.7 设置post steps,上传构建的java文件至程序服务器,并执行命令重启java项目
1.2.8 关闭负载均衡
1.3 发布界面如下:
commit_id从gogs获取
如果是github就是下图这个
第二种,使用gogs做源代码管理,java项目的栗子如下:
为来更好的理解我下面的操作,先看流程图,这是一个线上生产的一个发布过程,该方法会比较耗磁盘存储,因为要备份
2.1 先选择一个mavn项目
2.2.1配置如下:
case $Status in
Deploy)
echo "-----发布前进行打包备份-----"
echo "Status:$Status"
path="${WORKSPACE}/bak"
if [ -d $path ];
then
echo "The files is already exists "
else
mkdir -p $path
fi
cd ${WORKSPACE}
tar czf bak/${JOB_NAME}-${BUILD_NUMBER}.tar.gz * --exclude=bak
find $path -mtime 1 -name "*.tar.gz" -exec rm -rf {} \;
echo "Completin!"
;;
*)
exit
;;
esac
cd /usr/src/app/oto_saas_bank_pay_dev
pwd
ls -l
echo "Status:$Status"
echo "Version:$Version"
case $Status in
Deploy)
echo "-----发布-----"
;;
Rollback)
echo "-----回滚-----"
appfile=oto_saas_bank_pay-1.1.2-SNAPSHOT.jar
cd bak
tar -zxvf ${JOB_NAME}-$Version.tar.gz
cd ..
rm -rf target/$appfile
mv bak/target/$appfile target/$appfile
;;
*)
exit
;;
esac
supervisorctl status
supervisorctl reread
supervisorctl update
supervisorctl restart oto_saas_bank_pay_dev
supervisorctl status