首页 > 技术文章 > CI/CD版本回滚Jenkins解决方案

cutesnow 2020-10-13 14:42 原文

一、创建项目

填写项目名,关系到项目路径对应请谨慎命名

二、项目配置

1.配置字符串参数和选项参数

 

 

2.代码仓库配置

3.构建环境

4.构筑脚本配置

5.点击左下方的保存或者应用

三、使用方法

1.发布回退流程

2.查看历史发布信息

四、基础脚本(会自动对应到所在项目或项目文件夹):

 1 TmpDir=${WORKSPACE}
 2 Date=$(date "+%Y%m%d-%H%M%S")
 3 LogFile=/var/log/deploy/"$Status"_$(date "+%Y%m%d").log
 4 
 5 case $Status  in
 6   Deploy)    
 7     path="/bak$TmpDir/$Time"      #创建每次要备份的目录
 8     if [ -d $path ];
 9     then
10         echo "The files is already  exists " >> $LogFile
11     else
12         mkdir -p  $path
13         chmod 777 $path
14     fi
15     \cp -rf $TmpDir/* $path        #将打包好的文件备份到相应目录,覆盖已存在的目标
16     echo "$Date Completing! Project:${WORKSPACE} Status:$Status Version: $Time BuildNum:${BUILD_NUMBER}" >> $LogFile
17     ;;
18   Rollback)
19       cd /bak$TmpDir/$Time            #进入备份目录
20       \cp -rf * $TmpDir/       #将备份拷贝到程序打包目录中,并覆盖之前的包
21       echo "$Date Completing! Project:${WORKSPACE} Status:$Status Version:$Time BuildNum:${BUILD_NUMBER}" >> $LogFile
22       ;;
23   *)
24   exit
25       ;;
26 esac
27 
28 ReservedNum=30  #保留文件数
29 FileDir="/bak$TmpDir/"
30 
31 cd $FileDir   #进入备份目录
32 FileNum=$(ls -l | grep '^d' | wc -l)   #当前有几个文件夹,即几个备份
33 
34 while(( $FileNum > $ReservedNum))
35 do
36     OldFile=$(ls -rt | head -1)         #获取最旧的那个备份文件夹
37     echo  $date "$Date Delete File:"$OldFile >> $LogFile
38     rm -rf $FileDir/$OldFile
39     let "FileNum--"
40 done 
41 
42 # 下面放具体项目发布脚本指令(即由ci服务器分发到线上服务)
 

五、相关须知:

*ci 回退备份文件目录 /bak/var/lib/jenkins/workspace/xxx项目名/

需要时可手动查找相关版本项目文件,目前脚本内只保留单项目或目录30份备份文件,可根据需要更改脚本内参数30为既定量

*ci 发布回退日志文件目录 /var/log/deploy/ 会记录当天的发布和回退情况

示例:

20201012-165752 Completing! Project:/var/lib/jenkins/workspace/test-ci-backend Status:Deploy Version: 2020101224 BuildNum:84

20201012-164711 Completing! Project:/var/lib/jenkins/workspace/test-ci-backend Status:Rollback Version:2020101221 BuildNum:83

对应了秒级项目发布时间,项目所在位置即哪个项目,发布回退状态,发布和回退时填写时间版本号,发布的序号对应jenkins序号

推荐阅读