jenkins --备份回滚
场景一:打标签实现回滚
背景介绍:
本项目代码存储在gitlab,再通过jenkins发布到对应的节点上。
使用tag控制版本:每一次成功的构建,jenkins会自动为gitlab的分支打上tag,版本更新可直接选择production分支,当需要回滚时选择对应的tag进行构建。
jenkins主要配置
tag的参数化构建
Name: 此参数的变量名,可在之后配置以 $tags 形式引用;
Description: 描述信息,对此变量进行说明;
Parameter Type:抓取数据的类型,此处选择分支或tag,因为需要使用分支develop,使用tag rollback;
Branch Filter: 需要保留的分支名称,只对此处的分支进行展示,因为我们版本更新时只使用此分支。S
Tag Filter: 支持正则匹配,此处*为匹配所有;
Sort Mode: 排序方式;
Quick Filter: 勾选后,会在tag旁多一个可供filter的输入框;
list size: tag展示框一次可展示的tag数量。
构建成功打tag
如上图,勾选上仅在构建成功后打tag
Tag to push: 变量${BUILD_NUMBER}为系统自带变量,是构建编号,第11次构建即为11
Target remote name:这个名称在配置git拉代码的地方添加
源代码配置
由于以上配置,此处需要注意的是$tags变量与Target remote name的配置
效果展示
场景二:构建后生成压缩包,解压实现备份回滚
背景介绍
每个版本的代码push到gitlab的master后,将通过jenkins编译发布(build),并自动打包当前版本代码。回滚时解压对应版本压缩包并发布。
jenkins主要配置
定义type变量:build / rollback
若rollback,则自行填写rollback_number 变量
shell脚本
save_backnumber=5 #需要保留的备份包个数
PROJECT_NAME=${JOB_NAME#*_}
#先定义各种方法
function backup #新建该项目备份目录,打包当前版本代码
{
if [ ! -d "/var/lib/jenkins/common/${JOB_NAME}" ]; then mkdir -p /var/lib/jenkins/common/${JOB_NAME};fi
echo -e "\033[1;34m backup tar \033[0m"
tar -zvcf /var/lib/jenkins/common/${JOB_NAME}/${PROJECT_NAME}_${BUILD_NUMBER}.tar.gz -C ${WORKSPACE}/ . --exclude=.git || exit 2
}
function deleteoldtar #保留设定个数的备份包,多余的都删除
{
backend_number=`find /var/lib/jenkins/common/${JOB_NAME}/ -name "*.tar.gz" |wc -l`
delete_number=$((${backend_number}-${save_backnumber}))
if [[ ${backend_number} > ${save_backnumber} ]]
then
echo -e "\033[1;34m delete old tar \033[0m"
ls -lt /var/lib/jenkins/common/${JOB_NAME}/*|tail -n $delete_number|awk '{print $NF}'|xargs rm -rf {} || exit 2
fi
}
function rollback #解压需要回滚的备份包
{
rollback_tarname=${PROJECT_NAME}_${rollback_number}.tar.gz
echo -e "\033[1;34m start rollback ${rollback_tarname} \033[0m"
tar -xvf /var/lib/jenkins/common/${JOB_NAME}/${rollback_tarname} -C ${WORKSPACE}/ || exit 2
}
case $type in
Deploy) #若type变量为Deploy,则执行backup、deleteoldta两个方法
backup
deleteoldtar
;;
RollBACK)
rollback #若type变量为RollBACK,则执行rollback方法
;;
*)
exit
;;
esac