Jenkins回滚

一、目的

在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目录,再安装到本地仓库。
原文地址:https://www.cnblogs.com/dyaqi/p/14292486.html