場景一:打標簽實現回滾
背景介紹:
本項目代碼存儲在gitlab,再通過jenkins發布到對應的節點上。
使用tag控制版本:每一次成功的構建,jenkins會自動為gitlab的分支打上tag,版本更新可直接選擇production分支,當需要回滾時選擇對應的tag進行構建。
jenkins主要配置
tag的參數化構建
Name: 此參數的變量名,可在之后配置以 $tags 形式引用;
Description: 描述信息,對此變量進行說明;
Parameter Type:抓取數據的類型,此處選擇分支或tag,因為需要使用分支develop,使用tag rollback;
Branch Filter: 需要保留的分支名稱,只對此處的分支進行展示,因為我們版本更新時只使用此分支。S
Tag Filter: 支持正則匹配,此處*為匹配所有;
Sort Mode: 排序方式;
Quick Filter: 勾選后,會在tag旁多一個可供filter的輸入框;
list size: tag展示框一次可展示的tag數量。
構建成功打tag
如上圖,勾選上僅在構建成功后打tag
Tag to push: 變量${BUILD_NUMBER}為系統自帶變量,是構建編號,第11次構建即為11
Target remote name:這個名稱在配置git拉代碼的地方添加
源代碼配置
由於以上配置,此處需要注意的是$tags變量與Target remote name的配置
效果展示
場景二:構建后生成壓縮包,解壓實現備份回滾
背景介紹
每個版本的代碼push到gitlab的master后,將通過jenkins編譯發布(build),並自動打包當前版本代碼。回滾時解壓對應版本壓縮包並發布。
jenkins主要配置
定義type變量:build / rollback
若rollback,則自行填寫rollback_number 變量
shell腳本
save_backnumber=5 #需要保留的備份包個數
PROJECT_NAME=${JOB_NAME#*_}
#先定義各種方法
function backup #新建該項目備份目錄,打包當前版本代碼
{
if [ ! -d "/var/lib/jenkins/common/${JOB_NAME}" ]; then mkdir -p /var/lib/jenkins/common/${JOB_NAME};fi
echo -e "\033[1;34m backup tar \033[0m"
tar -zvcf /var/lib/jenkins/common/${JOB_NAME}/${PROJECT_NAME}_${BUILD_NUMBER}.tar.gz -C ${WORKSPACE}/ . --exclude=.git || exit 2
}
function deleteoldtar #保留設定個數的備份包,多余的都刪除
{
backend_number=`find /var/lib/jenkins/common/${JOB_NAME}/ -name "*.tar.gz" |wc -l`
delete_number=$((${backend_number}-${save_backnumber}))
if [[ ${backend_number} > ${save_backnumber} ]]
then
echo -e "\033[1;34m delete old tar \033[0m"
ls -lt /var/lib/jenkins/common/${JOB_NAME}/*|tail -n $delete_number|awk '{print $NF}'|xargs rm -rf {} || exit 2
fi
}
function rollback #解壓需要回滾的備份包
{
rollback_tarname=${PROJECT_NAME}_${rollback_number}.tar.gz
echo -e "\033[1;34m start rollback ${rollback_tarname} \033[0m"
tar -xvf /var/lib/jenkins/common/${JOB_NAME}/${rollback_tarname} -C ${WORKSPACE}/ || exit 2
}
case $type in
Deploy) #若type變量為Deploy,則執行backup、deleteoldta兩個方法
backup
deleteoldtar
;;
RollBACK)
rollback #若type變量為RollBACK,則執行rollback方法
;;
*)
exit
;;
esac