準備
- Jenkins 插件
- Active choices
- Conditional BuildStep
實現(xiàn)
參數(shù)化構(gòu)建過程
1. 添加基本參數(shù)
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 的環(huán)境變量 WORKSPACE
乏梁。
備份目錄在 WORKSPACE
下的 backup 目錄中「疑欤可以指定為其他目錄。
構(gòu)建
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
部署時蔓同,在構(gòu)建完成以后饶辙,將jar包復(fù)制到備份目錄下。
回滾時斑粱,通過選擇的文件名弃揽,獲取對應(yīng)jar包覆蓋原本的jar包。
注意修改 work_jar
參數(shù),這里使用的provider_name
是一個自定義的環(huán)境變量矿微,如果各個項目之間命名有一定的規(guī)律痕慢,可以使用自定義環(huán)境變量,來減少配置不同項目時修改的內(nèi)容涌矢。