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 "33[1;34m  backup tar  33[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 "33[1;34m  delete old tar  33[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 "33[1;34m  start rollback  ${rollback_tarname} 33[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

构建的效果为

原文地址:https://www.cnblogs.com/huandada/p/11041899.html