• 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目录,再安装到本地仓库。
    
  • 相关阅读:
    LeetCode第1题(two sum) 暴力法性能优化
    java.sql.SQLException: Column 'id' not found.
    数据分页显示 之 确定总页码数(优化)
    IntelliJ IDEA 提示"Form input without an associated label or title attribute"
    在JSP中图片上传到服务器后无法读取(已解决)
    The maximum-subarray problem
    Chapter 2:Getting Started
    Merge Sort in Java, C,C++ and Python
    Chapter 9 :Further Applications of Integration
    gSoap 中文传输
  • 原文地址:https://www.cnblogs.com/dyaqi/p/14292486.html
Copyright © 2020-2023  润新知