兩種場景:
一.生產發布回滾:
發布前先備份運行項目代碼,回滾直接用備份的回滾,保證回滾准確性
jenkins配置
腳本內容(這里只是單一推送項目目錄,實際需要根據項目來,集群推送或者自動化部署)
case $Status in
Deploy)
echo "####本次操作為版本發布,版本號為$BUILD_NUMBER####"
/bin/bash /data/sh/Deploy.sh
;;
Rollback)
echo "####本次操作為版本回滾,回滾版本號為$Versio####"
/bin/bash /data/sh/Rollback.sh
;;
*)
exit
;;
esac
# vim Deploy.sh
#!/bin/bash
## 保留備份個數
BUILD_SAVE=5
BACKDIR=${JENKINS_HOME}/backdir/${JOB_NAME}
WEB_SERVER=slave1
WORK_DIR=/data/htdocs/wwwroot
mkdir -p $BACKDIR
cd $BACKDIR
rsync -av ${WEB_SERVER}:${WORK_DIR}/* Onlinebak_$(date +%Y%m%d%H%M)
cd $WORKSPACE
rsync -av * ${WEB_SERVER}:${WORK_DIR}
while true;
do
cd $BACKDIR
BAKFILES=$(ls -1tr|wc -l)
if [ $BAKFILES -gt "${BUILD_SAVE}" ];then
ls -1tr |head -1|xargs rm -rf
else
break;
fi
done
# cat Rollback.sh
#!/bin/bash
BACKDIR=${JENKINS_HOME}/backdir/${JOB_NAME}
BACKFILE=$BACKDIR/$(ls -1t $BACKDIR|head -1)
WEB_SERVER=slave1
WORK_DIR=/data/htdocs/wwwroot
if [ -d $BACKFILE ];then
cd $WORKSPACE
rm -f ${WORKSPACE}/*
rsync -av ${BACKFILE}/* ${WORKSPACE}/
rsync -av * ${WEB_SERVER}:${WORK_DIR}
else
echo "backdir not find"
exit 1;
fi
發布頁面:
場景二:
測試項目回滾,發布失敗一般直接先回滾到上一個發布版本
jenkins配置
腳本內容
# cat Deploy.sh
#!/bin/bash
## 備份構建文件個數,等於jenkins丟棄廢棄的構建->保留最大個數
BUILD_SAVE=5
BACKDIR=${JENKINS_HOME}/backdir/${JOB_NAME}
WORK_DIR=/data/htdocs/wwwroot
mkdir -p $BACKDIR
cd $WORKSPACE
## 備份當前發布版本代碼,加入版本號,供回滾使用
tar -zcf $BACKDIR/${JOB_NAME}.VER${BUILD_NUMBER}.tar.gz *
rsync -av * ${WORK_DIR}
while true;
do
cd $BACKDIR
BAKFILES=$(ls -1tr *.tar.gz|wc -l)
if [ $BAKFILES -gt "$BUILD_SAVE" ];then
ls -1tr *.tar.gz|head -1|xargs rm -f
else
break;
fi
done
# cat Rollback.sh
#!/bin/bash
BACKDIR=${JENKINS_HOME}/backdir/${JOB_NAME}
## 根據jenkins版本號選擇鎖定回滾文件
BACKFILE=${BACKDIR}/${JOB_NAME}.VER${Version}.tar.gz
WORK_DIR=/data/htdocs/wwwroot
if [ -f $BACKFILE ];then
cd $WORKSPACE
rm -f ${WORKSPACE}/*
rsync -av $BACKFILE $WORKSPACE/
tar -zxf ${JOB_NAME}.VER${Version}.tar.gz
rm -f ${JOB_NAME}.VER${Version}.tar.gz
rsync -av * ${WORK_DIR}
else
echo "backfile not find"
exit 1;
fi
發布頁面