准备
- Jenkins 插件
- Active choices
- Conditional BuildStep
实现
参数化构建过程
1. 添加基本参数
2. 添加 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 条件性步骤
判断第一步中选择的操作类型,在回滚时跳过编译打包的步骤。
备份和回滚
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
是一个自定义的环境变量,如果各个项目之间命名有一定的规律,可以使用自定义环境变量,来减少配置不同项目时修改的内容。