Jenkins 备份回滚实现

准备

  • Jenkins 插件
    • Active choices
    • Conditional BuildStep

实现

参数化构建过程

1. 添加基本参数

《Jenkins 备份回滚实现》 参数化构建过程

2. 添加 Active choices Reactive Parameter

这一步,获取备份目录里的文件列表。

《Jenkins 备份回滚实现》 Active choices Reactive Parameter

Grovy Script:

path="${jenkinsProject.workspace}/backup/"
rollback=['bash', '-c', "ls -t1 ${path} "].execute().text.readLines()

if (action.equals("RollBack")) {
  return rollback
} else {
  return ["选择RollBack后显示"]
}

这里通过 jenkinsProject.workspace 获取 jenkins 的环境变量 WORKSPACE
备份目录在 WORKSPACE 下的 backup 目录中。可以指定为其他目录。

构建

Conditional step 条件性步骤

《Jenkins 备份回滚实现》 2A34FC1E-F3BE-4775-8C18-C5390037B7AC.png

判断第一步中选择的操作类型,在回滚时跳过编译打包的步骤。

备份和回滚

《Jenkins 备份回滚实现》 8399FDE8-CCE4-49D9-ABA1-3731920BF883.png

backup_path=${WORKSPACE}/backup
if [ ! -d $backup_path ]; then
    mkdir $backup_path
fi
work_jar=${WORKSPACE}/${provider_name}/build/libs/${provider_name}-1.0.0-SNAPSHOT.jar
if [ ! "$action" = "RollBack" ]; then
    cd ${WORKSPACE}
    branch=${gitbranch}
    back_jar=$backup_path/${JOB_NAME}-${branch/#"origin/"/}-${BUILD_NUMBER}.jar
    cp $work_jar $back_jar
    
    cd $backup_path
    total_file_num=`ls -l | grep -v 'total' | wc -l`
    if [ $total_file_num -gt 10 ];
    then
        num=`expr $total_file_num - 10`
        files=`ls -ltr | grep -v 'total' | awk '{print $9}' | head -n $num`
        echo $files | xargs rm -f
        echo "保留10个备份,删除早期备份: " $files
    fi
else
    cp $backup_path/${rollback} $work_jar
fi

部署时,在构建完成以后,将jar包复制到备份目录下。
回滚时,通过选择的文件名,获取对应jar包覆盖原本的jar包。
注意修改 work_jar参数,这里使用的provider_name是一个自定义的环境变量,如果各个项目之间命名有一定的规律,可以使用自定义环境变量,来减少配置不同项目时修改的内容。

效果

《Jenkins 备份回滚实现》 665BA589-81BF-47D6-9BB6-D65A9DE68CF2.png
《Jenkins 备份回滚实现》 01090BFA-3B4F-4E48-BBE2-BA50BC3D94AE.png

    原文作者:colbrze
    原文地址: https://www.jianshu.com/p/35a2c423682b
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞