Jenkins 非Tags发布回滚方案

 

参考了:http://www.javashuo.com/article/p-pfjrcrql-p.html

Jenkins回滚可以通过每次发布从主干打tag,然后发布的时候发tag,比如tag, v1, v2,v3 如果我发布了v3,想要回滚回v2,直接在Jenkins中选择v2的tag地址重新构建就可以回滚到v2发布时的代码构建。

 

但是如果发布时没有打tag的习惯或者觉得重构代码比较费时如何操作?

下面看下如何配置

 

参数化构建过程中添加,如图,按自己需要添加

接着是发布脚本

 

case $Status  in

  Deploy)

    echo "=========== Generate deploy parameters =============="

    path="${WORKSPACE}/bak/$BUILD_ID"

    if [ -d $path ];

    then

        echo "===== The backup directory already exists ======="

    else

        mkdir -p  $path

    fi

    

    #war包路径

    jar_file=$(find $WORKSPACE/$module/target -name *.war)

    #war包名称

    war_file_name=$( basename $jar_file)

    

    yes|cp -a $jar_file $WORKSPACE/bak/$BUILD_ID/

    ;;

  Rollback)

    echo "========== Generate Rollback parameters ============"

    echo "Rollback_tag:$Rollback_tag"

    

    #war包路径

    jar_file=$(find $WORKSPACE/bak/$Rollback_tag -name *.war)

    

    #war包名称

    war_file_name=$( basename $jar_file)

      ;;

  *)

  exit

      ;;

esac

 

#如果使用ansbile发布请开启下面的变量注入

#echo jar_file=$jar_file >>tmp.pro

#echo war_file_name=$war_file_name >>tmp.pro

 

echo "============ Start the deploy or rollback ============="

scp $jar_file [email protected]:/usr/local/newindex/

ssh [email protected] /usr/local/newindex/deploy-new-index.sh

 

##############################################################

附上陈旧备份清理脚本

#/bin/bash

#饭票20190402

#用于判断Jenkins的备份目录,如果数量大于5就删除最久的一个备份目录

units=5

dir=`ls /jenkins/workspace/ | grep -v "package-lock.json"|grep -v "node_modules"`

 

for i in $dir

do

  if [ -d /jenkins/workspace/$i/bak ];

  then

     for x in 1 2 3

     do

      dir_units=`ls /jenkins/workspace/$i/bak | wc -l`

      if [ $dir_units -gt $units ];

      then

         a=`ls -tr /jenkins/workspace/$i/bak/ | head -1`

         echo "$i 目录下有需要清理的陈旧备份,第 $x 次清理 $a 备份目录" `date`

         #find /jenkins/workspace/$i/bak -name $a  -exec rm -rf {} \;

         find /jenkins/workspace/$i/bak -name $a | xargs rm -rf;

     fi

     done

fi

 

done