一、目的
在Jenkins的應用中,根據構建的版本號(Build Version) 進行回滾代碼,實現思路為:
在中間服務器(Jenkisn服務器)中把項目打包之后,按照構建版本號備份包,在回滾的時候按照版本號去尋找相應的包,發送到目標服務器。
二、構建不可回滾項目
此次配置脫胎於之前的不可回滾項目,因此是在之前配置的基礎上進行改造的,不可回滾的項目詳細見:https://www.cnblogs.com/dyaqi/p/13153127.html, 同學們可以結合兩篇文章靈活配置,實現自己的目的。
三、改造為可回滾項目
1、General-添加參數
添加在構建時可進行選擇的參數和展示的字符參數。
2、構建環境
去掉勾選“Delete workspace before build starts”,不刪除。
3、構建-1
clean compile package -Dmaven.test.skip=true -Ptest
清除target目錄,編譯、打包項目;
-Dmaven.test.skip=true為不執行測試用例也不編譯測試用例類;
-Ptest為觸發配置文件。
此處詳細知識可見附1 。
4、構建-2
case $Status in
Deploy)
echo "Status:$Status"
path="${WORKSPACE}/bak/${BUILD_NUMBER}" #創建每次要備份的目錄
if [ -d $path ];
then
echo "The files is already exists "
else
mkdir -p $path
fi
\cp -f ${WORKSPACE}/target/*.war $path #將打包好的war包備份到相應目錄,覆蓋已存在的目標
echo "Completing!"
;;
Rollback)
echo "Status:$Status"
echo "Version:$Version"
cd ${WORKSPACE}/bak/$Version #進入備份目錄
\cp -f *.war ${WORKSPACE}/target/ #將備份拷貝到程序打包目錄中,並覆蓋之前的war包
;;
*)
exit
;;
esac
執行完該段腳本后,會在Jenkins服務器中的WORKSPACE下創建bak目錄,用來存放備份文件,如圖:
5、構建-3
ReservedNum=5 #保留文件數
FileDir=${WORKSPACE}/bak/
date=$(date "+%Y%m%d-%H%M%S")
cd $FileDir #進入備份目錄
FileNum=$(ls -l | grep '^d' | wc -l) #當前有幾個文件夾,即幾個備份
while(( $FileNum > $ReservedNum))
do
OldFile=$(ls -rt | head -1) #獲取最舊的那個備份文件夾
echo $date "Delete File:"$OldFile
rm -rf $FileDir/$OldFile
let "FileNum--"
done
此段代碼為在每次構建的時候,檢查備份個數是否超過5個,假如超過5個,則清除老的備份,所以只能回滾5個版本以內的代碼。
6、構建后操作
只改變“Delete workspace when build is done”,去掉Success的勾選,是指成功(Success)構建之后的文件不刪除。
四、發布
回到項目主界面,點擊Build with Parameters
發布選擇Deploy--->開始構建,即可開始發布
回滾選擇Rollback--->輸入回滾版本---->開始構建,版本號從構建歷史中選擇一個輸入
附1
1.maven clean。
清理項目的target目錄
2.maven compile
編譯項目
3.maven test
編譯項目后,再執行Junit測試方法
4.maven package
編譯項目后,再執行Junit測試方法,再把項目打包到target目錄
5.maven install
編譯項目后,再執行Junit測試方法,再把項目打包到target目錄,再安裝到本地倉庫。