jenkins本身作為一款運維利器,具備
1. 持續集成 (Continuous integration)
2. 持續交付(Continuous delivery)
3. 持續部署(continuous deployment)
的強大能力, 對於生產的版本部署, 有時候會遇到新發的版本出現嚴重BUG等問題, 急需進行版本回退,為了解決這種應急問題, 特地介紹下如何使用jenkins做web版本控制,在不同版本之間可以快速切換。
1. jenkins的“構建”tab中增加構建步驟: Execute shell
shell腳本講解:
# 設置部署的項目名稱 PROJECT_NAME="optimus-mobile" # 清理掉上次部署遺留下的項目壓縮包 rm -rfv /data/work/.jenkins/jobs/${JOB_NAME}/workspace/*.tar.gz; # 切換到jenkins部署后打包tar.gz存放的目錄空間 cd /data/work/.jenkins/jobs/${JOB_NAME}/workspace; # 重點!! 創建版本文件 命名規則: rev. + 項目名 touch rev.${PROJECT_NAME} # 把job的構建編碼作為版本號存放到rev文件中(對於SVN代碼管理的,可以使用SVN的提交ID作為版本號) echo $BUILD_NUMBER > rev.${PROJECT_NAME} # 對workspace空間中的所有文件打包成tar.gz tar zcvf ${JOB_NAME}.tar.gz *;
2. jenkins的“構建后操作”tab中增加構建步驟: Send build artifacts over SSH (通過SSH通道發送構建好的文件)
在Exec command框中插入如下腳本:
#定義當前最新版本的tomcat目錄(里面是apache tomcat解壓文件)
PROJECT_DEPLOY_HOME="/data/work/optimus-mobile"
# 定義版本的存放目錄(里面存儲了該項目的所有的版本)
PROJECT_RELEASE_HOME="/data/work/release/optimus-mobile"
#定義項目名稱
PROJECT_NAME="optimus-mobile"
#定義版本號所在的文件名稱
PROJECT_CHECKOUT_REV_FILE="rev.${PROJECT_NAME}"
#定義最新的版本存放的文件夾上級目錄(tomcat中docs是配置指向這里)
PROJECT_WEB_HOME="/data/work/web"
# 設置CATALINA_BASE(用於后面的tomcat啟動)
CATALINA_BASE="/data/work/optimus-mobile"
#定義當前構建的版本文件所在的文件夾
WORK_FOLD="/data/work/jenkins-deployer-upload/${JOB_NAME}/${BUILD_ID}/"
#進入當前構建的版本文件夾
cd ${WORK_FOLD}
#解壓tar
tar zxvf *.tar.gz
#刪除tar
rm *.tar.gz
#獲取版本號存儲文件中存儲的版本號值
REV=`cat ${WORK_FOLD}/${PROJECT_CHECKOUT_REV_FILE}`
#定義新版本的文件夾名稱(帶上.版本號)
REV_PROJECT="${PROJECT_NAME}.${REV}"
#刪除同版本號的文件夾(如果有)
rm -rf "${PROJECT_RELEASE_HOME}/${REV_PROJECT}"
#新建新版本對應的文件夾
mkdir "${PROJECT_RELEASE_HOME}/${REV_PROJECT}"
#把tar解壓后的文件全部移動到新建的版本文件夾
mv * "${PROJECT_RELEASE_HOME}/${REV_PROJECT}"
#進入tomcat中當前指向的文件夾目錄的上級
cd ${PROJECT_WEB_HOME}
# 刪除該目錄(這是個軟鏈接)
rm ${PROJECT_NAME}
# 重新創建軟鏈接, 指向最新的版本號
ln -s "${PROJECT_RELEASE_HOME}/${REV_PROJECT}" ${PROJECT_NAME}
# 關閉tomcat
sh ${CATALINA_BASE}/bin/shutdown.sh -force;
sleep 10;
# 刪除tomcat中的日志
rm -f ${CATALINA_BASE}/logs/*;
#重啟tomcat
sh ${CATALINA_BASE}/bin/startup.sh
3. 配置完畢后,保存jenkins, 立即構建實例
藍色球表示構建成功, BUILD_ID= 27
4. 此時文件已經上傳生產服務器.
看下 /data/work/release/optimus-mobile目錄下的文件:
看到里面存了兩個版本。
5. 查看最新版本文件夾
cd /data/work/web/
ll
看到當前optimus-mobile軟鏈接指向了BUILD_ID=27的版本文件夾, 這個版本是最新的
6. 查看tomcat的conf/server.xml文件配置:
可見tomcat的部署目錄指向的是
/data/work/web/optimus-mobile
路徑, /data/work/web/optimus-mobile 路徑真實是軟鏈接指向最新的
/data/work/release/optimus-mobile/optimus-mobile.27
7. 如果27版本剛發完生產,測試發現問題,需要馬上回退,回退方法只需要修改軟鏈接指向:
# 進入optimus-mobile正式版本目錄文件夾上級 cd /data/work/web/ # 刪除軟鏈接 rm optimus-mobile # 新建軟鏈接,指向上一個版本號25 ln -s /data/work/release/optimus-mobile/optimus-mobile.25 optimus-mobile
完畢~~~~~~~~~~~~~~~~~~~~~~~~