今天小編就為大家?guī)?lái)一篇有關(guān)llinux實(shí)現(xiàn)自動(dòng)上線服務(wù)腳本的文章。小編覺(jué)得挺實(shí)用的,為此分享給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧。寫腳本之前先交代一下整個(gè)升級(jí)的流程:
上邊的流程大體是這樣,其實(shí)整體并不難,復(fù)雜的是之前的各種判斷??聪履_本是寫成了兩個(gè)腳本文件,上線部署和失敗后的回退腳本,應(yīng)用啟停的腳本過(guò)會(huì)再提供。
成都創(chuàng)新互聯(lián)擁有十余年的建站服務(wù)經(jīng)驗(yàn),在此期間,我們發(fā)現(xiàn)較多的客戶在挑選建站服務(wù)商前都非常的猶豫。主要問(wèn)題集中:在無(wú)法預(yù)知自己的網(wǎng)站呈現(xiàn)的效果是什么樣的?也無(wú)法判斷選擇的服務(wù)商設(shè)計(jì)出來(lái)的網(wǎng)頁(yè)效果自己是否會(huì)滿意?成都創(chuàng)新互聯(lián)業(yè)務(wù)涵蓋了互聯(lián)網(wǎng)平臺(tái)網(wǎng)站建設(shè)、移動(dòng)平臺(tái)網(wǎng)站制作、網(wǎng)絡(luò)推廣、定制網(wǎng)站制作等服務(wù)。成都創(chuàng)新互聯(lián)網(wǎng)站開(kāi)發(fā)公司本著不拘一格的網(wǎng)站視覺(jué)設(shè)計(jì)和網(wǎng)站開(kāi)發(fā)技術(shù)相結(jié)合,為企業(yè)做網(wǎng)站提供成熟的網(wǎng)站設(shè)計(jì)方案。
#!/bin/bash
#
# SCRIPTNAME:sdwan_version.sh
# DATE: 2020/03/13
# author: Mright
# version: V1.3
# desc:
# V1.2:增加version.info文件到應(yīng)用用戶目錄下,保存即將部署的應(yīng)用版本號(hào)以及當(dāng)前生產(chǎn)上部署的
# 版本號(hào),應(yīng)用部署完成后將版本號(hào)回寫到version.info中
# V1.3:調(diào)整version.info內(nèi)容可記錄不同應(yīng)用版本號(hào),記錄升級(jí)后的版本以及上一個(gè)版本號(hào)
#
# ******************** DEFINE INPUT BEGIN **********************************
set -o pipefail
\# VERSION:即將部署的版本名
VERSION=$1
\# 即將部署生產(chǎn)版本號(hào)
V=$2
V=${V:=$(date +"%Y%m%d")}
\# 版本機(jī)上的tar包
VERSIONPACKAGE=$3
# ******************** DEFINE INPUT END **********************************
# ******************** DEFINE ARGS BEGIN *********************************
# 版本信息
APPINFOFILE="${HOME}/version.info"
# 當(dāng)前應(yīng)用版本號(hào)
CURRENTVERSIONID=$(cat ${APPINFOFILE}|grep "${VERSION}_latest"|awk -F':' '{print $2}')
# 網(wǎng)關(guān)應(yīng)用名
ZUULAPPNAME="example-sdwan-api-gateway-${CURRENTVERSIONID}.jar"
# SITE應(yīng)用名
SITEAPPNAME="example-sdwan-nw-site-${CURRENTVERSIONID}.jar"
# DEVICE應(yīng)用名
DEVICEAPPNAME="example-sdwan-nw-device-${CURRENTVERSIONID}.jar"
# WEB應(yīng)用名
WEBAPPNAME="example-web-dist"
# 網(wǎng)關(guān)部署路徑
ZUULAPPPATH="${HOME}/exampleb-sdwan-api-gateway/"
# SITE部署路徑
SITEAPPPATH="${HOME}/example-sdwan-nw-site/"
# DEVICE部署路徑
DEVICEAPPPATH="${HOME}/example-sdwan-nw-device/"
# WEB前端部署路徑
WEBAPPPATH="${HOME}/web/"
# VERSONDATE:版本部署日期
VERSIONDATE=$(date +"%Y%m%d")
BASEVERSIONPATH="/home/example/nas/sdwan"
# VERSIONPATH:版本下載存放路徑
VERSIONPATH="${BASEVERSIONPATH}/sdwan_version/${VERSIONDATE}"
# DBVERSIONPATH:版本數(shù)據(jù)庫(kù)sql腳本備份存放路徑
DBVERSIONPATH="${BASEVERSIONPATH}/db_version/${VERSIONDATE}"
# ZUULVERSIONPATH:網(wǎng)關(guān)微服務(wù)備份路徑
ZUULVERSIONPATH="${BASEVERSIONPATH}/zuul_version/${VERSIONDATE}"
# SITEVERSIONPATH:site微服務(wù)備份路徑
SITEVERSIONPATH="${BASEVERSIONPATH}/site_version/${VERSIONDATE}"
# DEVICEVERSIONPATH:device微服務(wù)備份路徑
DEVICEVERSIONPATH="${BASEVERSIONPATH}/device_version/${VERSIONDATE}"
# WEBVERSIONPATH: web前端備份路徑
WEBVERSIONPATH="${BASEVERSIONPATH}/web_version/${VERSIONDATE}"
# 腳本執(zhí)行日志存放路徑
LOGPATH="/tmp/${HOSTNAME}_${VERSIONDATE}.log"
# ******************** DEFINE ARGS END ***********************************
# ******************** FUNCTION func_info BEGIN **************************
function func_info(){
cat<
參數(shù)說(shuō)明:
args1:部署應(yīng)用名稱,寫參數(shù)時(shí)需去掉"<"">"
[zuul|site|device|web]
args2:即將部署應(yīng)用版本號(hào)
1.3.0
args3:版本機(jī)上的版本包tar包全名
upline-file-v1.3.tar.gz
示例:sh sdwan_version.sh zuul 1.3.0 upline-file-v1.3.tar.gz
EOF
}
# ******************** FUNCTION func_info END ***************************
# ******************** FUNCTION log_info BEGIN **************************
function log_info(){
echo "[$(date +'%Y-%m-%d %H:%M:%S')][INFO]"
}
# ******************** FUNCTION log_info END ***************************
# ******************** FUNCTION log_info BEGIN **************************
function log_error(){
echo "[$(date +'%Y-%m-%d %H:%M:%S')][ERROR]"
}
# ******************** FUNCTION log_info END ***************************
# ******************** FUNCTION init_env BEGIN ***************************
function init_env(){
echo "VERSION=${VERSION},v=${V},VERSIONPACKAGE=${VERSIONPACKAGE}"
echo "$(log_info)準(zhǔn)備初始化環(huán)境..."
if [ ! -s ${APPINFOFILE} ];then
echo -ne "zuul_last_id: 1.1.0\nzuul_temporary_id:1.1.0\nzuul_latest_id:1.1.0\n" >>${APPINFOFILE}
echo -ne "site_last_id: 1.1.0\nsite_temporary_id:1.1.0\nsite_latest_id:1.1.0\n" >>${APPINFOFILE}
echo -ne "device_last_id: 1.1.0\ndevice_temporary_id:1.1.0\ndevice_latest_id:1.1.0\n" >>${APPINFOFILE}
echo -ne "web_last_id: 1.1.0\nweb_temporary_id:1.1.0\nweb_latest_id:1.1.0\n" >>${APPINFOFILE}
fi
[ ! -f ${APPINFOFILE} ]&&{ echo "$(log_error)${APPINFOFILE}不存在";exit 110;}
[ -z "${CURRENTVERSIONID}" ]&&{ echo "$(log_error)未獲取到當(dāng)前應(yīng)用的版本號(hào)!";exit 110;}
[ ! -d ${VERSIONPATH} ]&&{ echo "$(log_info)${VERSIONPATH}不存在準(zhǔn)備創(chuàng)建...";mkdir -p ${VERSIONPATH};}
[ ! -d ${DBVERSIONPATH} ]&&{ echo "$(log_info)${DBVERSIONPATH}不存在準(zhǔn)備創(chuàng)建...";mkdir -p ${DBVERSIONPATH};}
case ${VERSION} in
"zuul")
[ ! -d ${ZUULVERSIONPATH} ]&&{ echo "$(log_info)${ZUULVERSIONPATH}不存在準(zhǔn)備創(chuàng)建...";mkdir -p ${ZUULVERSIONPATH};}
;;
"site")
[ ! -d ${SITEVERSIONPATH} ]&&{ echo "$(log_info)${SITEVERSIONPATH}不存在準(zhǔn)備創(chuàng)建...";mkdir -p ${SITEVERSIONPATH};}
;;
"device")
[ ! -d ${DEVICEVERSIONPATH} ]&&{ echo "$(log_info)${DEVICEVERSIONPATH}不存在準(zhǔn)備創(chuàng)建...";mkdir -p ${DEVICEVERSIONPATH};}
;;
"web")
[ ! -d ${WEBVERSIONPATH} ]&&{ echo "$(log_info)${WEBVERSIONPATH}不存在準(zhǔn)備創(chuàng)建...";mkdir -p ${WEBVERSIONPATH};}
;;
*)
echo "$(log_error)參數(shù)錯(cuò)誤,請(qǐng)重新輸入要操作版本"
exit 110
;;
esac
}
# ******************** FUNCTION init_env END *******************************
# ******************** FUNCTION backup_app BEGIN ***************************
function backup_app(){
echo "${log_info}準(zhǔn)備應(yīng)用備份..."
case ${VERSION} in
"zuul")
# 當(dāng)前應(yīng)用版本號(hào)
CURRENTVERSIONID=$(cat ${APPINFOFILE}|grep "zuul_latest"|awk -F':' '{print $2}')
# 網(wǎng)關(guān)應(yīng)用名
ZUULAPPNAME="example-sdwan-api-gateway-${CURRENTVERSIONID}.jar"
cd ${ZUULVERSIONPATH}
if [ ! -f ${ZUULAPPNAME} ];then
[ ! -f ${ZUULAPPPATH}/${ZUULAPPNAME} ]&&{ echo "$(log_error)${ZUULAPPNAME}不存在無(wú)法備份";exit 120;}
cp -a ${ZUULAPPPATH}/${ZUULAPPNAME} ${ZUULVERSIONPATH}
[ $? -eq 0 ]&&{ echo "$(log_info)${ZUULAPPNAME}備份成功";}||{ echo "$(log_error)${ZUULAPPNAME}備份失??!";exit 120;}
# 備份成功將當(dāng)前生產(chǎn)版本號(hào)保存至temporary_id
sed -i "s/zuul_temporary_id:.*/zuul_temporary_id:${V}/g" ${APPINFOFILE}
else
echo "$(log_info)${ZUULAPPNAME}備份已存在無(wú)需備份!"
fi
;;
"site")
# 當(dāng)前應(yīng)用版本號(hào)
CURRENTVERSIONID=$(cat ${APPINFOFILE}|grep "site_latest"|awk -F':' '{print $2}')
# SITE應(yīng)用名
SITEAPPNAME="example-sdwan-nw-site-${CURRENTVERSIONID}.jar"
cd ${SITEVERSIONPATH}
if [ ! -f ${SITEAPPNAME} ];then
[ ! -f ${SITEAPPPATH}/${SITEAPPNAME} ]&&{ echo "$(log_error)${SITEAPPNAME}不存在無(wú)法備份";exit 130;}
cp -a ${SITEAPPPATH}/${SITEAPPNAME} ${SITEVERSIONPATH} &>/dev/null
[ $? -eq 0 ]&&{ echo "$(log_info)${SITEAPPNAME}備份成功";}||{ echo "$(log_error)${SITEAPPNAME}備份失敗!";exit 130;}
# 備份成功將當(dāng)前生產(chǎn)版本號(hào)保存至temporary_id
sed -i "s/site_temporary_id:.*/site_temporary_id:${V}/g" ${APPINFOFILE}
else
echo "$(log_info)${SITEAPPNAME}備份已存在無(wú)需備份!"
fi
;;
"device")
# 當(dāng)前應(yīng)用版本號(hào)
CURRENTVERSIONID=$(cat ${APPINFOFILE}|grep "device_latest"|awk -F':' '{print $2}')
# DEVICE應(yīng)用名
DEVICEAPPNAME="example-sdwan-nw-device-${CURRENTVERSIONID}.jar"
cd ${DEVICEVERSIONPATH}
if [ ! -f ${DEVICEAPPNAME} ];then
[ ! -f ${DEVICEAPPPATH}/${DEVICEAPPNAME} ]&&{ echo "$(log_error)${DEVICEAPPNAME}不存在無(wú)法備份";exit 140;}
cp -a ${DEVICEAPPPATH}/${DEVICEAPPNAME} ${DEVICEVERSIONPATH} &>/dev/null
[ $? -eq 0 ]&&{ echo "$(log_info)${DEVICEAPPNAME}備份成功";}||{ echo "$(log_error){DEVICEAPPNAME}備份失?。?;exit 140;}
# 備份成功將當(dāng)前生產(chǎn)版本號(hào)保存至temporary_id
sed -i "s/device_temporary_id:.*/device_temporary_id:${V}/g" ${APPINFOFILE}
else
echo "$(log_info)${DEVICEAPPNAME}備份已存在無(wú)需備份!"
fi
;;
"web")
# 當(dāng)前應(yīng)用版本號(hào)
CURRENTVERSIONID=$(cat ${APPINFOFILE}|grep "web_latest"|awk -F':' '{print $2}')
# WEB應(yīng)用名
WEBAPPNAME="example-web-dist"
cd ${WEBVERSIONPATH}
if [ ! -f ${WEBAPPNAME}.tar.v${CURRENTVERSIONID}.gz ];then
[ ! -d ${WEBAPPPATH}/${WEBAPPNAME} ]&&{ echo "$(log_error)${WEBAPPNAME}不存在無(wú)法備份";exit 150;}
tar -zcf ${WEBAPPNAME}.tar.v${CURRENTVERSIONID}.gz -C ${WEBAPPPATH} ${WEBAPPNAME}
# 二次備份,穩(wěn)定后可取消
if [ -d ${WEBAPPPATH}/${WEBAPPNAME}_$(date +"%Y%m%d").bak ];then
rm -rf ${WEBAPPPATH}/${WEBAPPNAME}_$(date +"%Y%m%d").bak
fi
mv ${WEBAPPPATH}/${WEBAPPNAME} ${WEBAPPPATH}/${WEBAPPNAME}_$(date +"%Y%m%d").bak
[ $? -eq 0 ]&&{ echo "$(log_info)${WEBAPPNAME}備份成功";}||{ echo "$(log_error)${WEBAPPNAME}備份失??!";exit 150;}
# 備份成功將當(dāng)前生產(chǎn)版本號(hào)保存至temporary_id
sed -i "s/web_temporary_id:.*/web_temporary_id:${V}/g" ${APPINFOFILE}
else
echo "$(log_info)${WEBAPPNAME}備份已存在無(wú)需備份!"
fi
;;
*)
echo "$(log_error)參數(shù)錯(cuò)誤,請(qǐng)重新輸入要操作版本"
exit 120
;;
esac
}
# ******************** FUNCTION backup_app END *****************************
# ******************** FUNCTION deploy_app BEGIN ***************************
function deploy_app(){
cd ${VERSIONPATH}
# 通過(guò)版本tar包獲取目錄名
LOCALDIR=$(echo ${VERSIONPACKAGE}|awk -F '.tar' '{print $1}')
[ ! -f ${VERSIONPACKAGE} ]&&{ echo "$(log_error)版本包不存在,請(qǐng)檢查版本包是否已放置在指定位置";exit 200;}
tar -zxf ${VERSIONPACKAGE} &>/dev/null
[ $? -ne 0 ]&&{ echo "$(log_error)版本包解壓異常";exit 200;}
cd ${LOCALDIR}
case ${VERSION} in
"zuul")
JAR=$(basename ${ZUULAPPPATH})
[ ! -f ${JAR}-${V}.jar ]&&{ echo "$(log_error)${JAR}-${V}.jar應(yīng)用jar包不存在,無(wú)法部署!";exit 210;}
mv ${JAR}-${V}.jar ${ZUULAPPPATH} &>/dev/null
[ $? -eq 0 ]&&{ echo "$(log_info)網(wǎng)關(guān)部署成功!";}||{ echo "$(log_error)網(wǎng)關(guān)部署失敗!";exit 210;}
sed -i "s/zuul_latest_id:.*/zuul_latest_id:${V}/g" ${APPINFOFILE}
# 部署成功將當(dāng)前生產(chǎn)版本號(hào)保存至temporary_id
sed -i "s/zuul_last_id:.*/zuul_last_id:${CURRENTVERSIONID}/g" ${APPINFOFILE}
;;
"site")
JAR=$(basename ${SITEAPPPATH})
[ ! -f ${JAR}-${V}.jar ]&&{ echo "$(log_error)${JAR}-${V}.jar應(yīng)用jar包不存在,無(wú)法部署!";exit 220;}
mv ${JAR}-${V}.jar ${SITEAPPPATH} &>/dev/null
[ $? -eq 0 ]&&{ echo "$(log_info)SITE微服務(wù)部署成功!";}||{ echo "$(log_error)SITE微服務(wù)部署失敗!";exit 220;}
sed -i "s/site_latest_id:.*/site_latest_id:${V}/g" ${APPINFOFILE}
# 部署成功將當(dāng)前生產(chǎn)版本號(hào)保存至temporary_id
sed -i "s/site_last_id:.*/site_last_id:${CURRENTVERSIONID}/g" ${APPINFOFILE}
;;
"device")
JAR=$(basename ${DEVICEAPPPATH})
[ ! -f ${JAR}-${V}.jar ]&&{ echo "$(log_error)${JAR}-${V}.jar應(yīng)用jar包不存在,無(wú)法部署!";exit 230;}
mv ${JAR}-${V}.jar ${DEVICEAPPPATH} &>/dev/null
[ $? -eq 0 ]&&{ echo "$(log_info)DEVICE微服務(wù)部署成功!";}||{ echo "$(log_error)DEVICE微服務(wù)部署失敗!";exit 230;}
sed -i "s/device_latest_id:.*/device_latest_id:${V}/g" ${APPINFOFILE}
# 部署成功將當(dāng)前生產(chǎn)版本號(hào)保存至temporary_id
sed -i "s/device_last_id:.*/devicd_last_id:${CURRENTVERSIONID}/g" ${APPINFOFILE}
;;
"web")
[ ! -f ${WEBAPPNAME}*.gz ]&&{ echo "${WEBAPPNAME}應(yīng)用版本包不存在";exit 240;}
tar -zxf ${WEBAPPNAME}*.gz -C ${WEBAPPPATH} &>/dev/null
[ $? -eq 0 ]&&{ echo "$(log_info)前端應(yīng)用部署成功!";}||{ echo "$(log_error)前端應(yīng)用部署失敗!";exit 240;}
sed -i "s/web_latest_id:.*/web_latest_id:${V}/g" ${APPINFOFILE}
# 部署成功將當(dāng)前生產(chǎn)版本號(hào)保存至temporary_id
sed -i "s/web_last_id:.*/web_last_id:${CURRENTVERSIONID}/g" ${APPINFOFILE}
;;
*)
echo "$(log_error)參數(shù)錯(cuò)誤,請(qǐng)重新輸入要操作版本"
func_info
exit 111
;;
esac
}
#******************** FUNCTION deploy_app END *****************************
function main(){
case ${VERSION} in
"zuul")
init_env
backup_app
deploy_app
;;
"site")
init_env
backup_app
deploy_app
;;
"device")
init_env
backup_app
deploy_app
;;
"web")
init_env
backup_app
deploy_app
;;
*)
echo "$(log_error)參數(shù)錯(cuò)誤,請(qǐng)重新輸入要操作版本"
func_info
exit 111
;;
esac
}
if [ ${#} -ne 3 ];then
echo "參數(shù)個(gè)數(shù)錯(cuò)誤"
func_info
exit 100
fi
main
下邊給出回滾的腳本
#!/bin/bash
#
# SCRIPTNAME:sdwan_version_rollback.sh
# DATE: 2020/03/12
# author: Mright
# version: V1.2
# desc:
# V1.1:sdwan版本回滾腳本,通過(guò)傳入操作的應(yīng)用名稱以及要回退至輸入的應(yīng)用版本號(hào),將當(dāng)前應(yīng)用進(jìn)行回退
#
# V1.2:擴(kuò)展version.info文件內(nèi)容,根據(jù)不同應(yīng)用記錄各應(yīng)用的版本號(hào),并修改相關(guān)處理腳本
#
# ******************** DEFINE INPUT BEGIN **********************************
set -o pipefail
# 版本信息
APPINFOFILE="${HOME}/version.info"
# VERSION:即將部署的版本名
VERSION=$1
# 要回滾版本號(hào)
V=$2
#V=${V:=${ROLLBACKVERSION}}
# 版本機(jī)上的tar包
#VERSIONPACKAGE=$3
# ******************** DEFINE INPUT END **********************************
# ******************** DEFINE ARGS BEGIN *********************************
APPINFOFILE="${HOME}/version.info"
# 網(wǎng)關(guān)應(yīng)用名
ZUULAPPNAME="example-sdwan-api-zuul-${V}.jar"
# SITE應(yīng)用名
SITEAPPNAME="example-sdwan-nw-site-${V}.jar"
# DEVICE應(yīng)用名
DEVICEAPPNAME="example-sdwan-nw-device-${V}.jar"
# WEB應(yīng)用名
WEBAPPNAME="example-web-dist.tar.v${V}.gz"
# 網(wǎng)關(guān)部署路徑
ZUULAPPPATH="${HOME}/example-sdwan-api-zuul/"
# SITE部署路徑
SITEAPPPATH="${HOME}/example-sdwan-nw-site/"
# DEVICE部署路徑
DEVICEAPPPATH="${HOME}/example-sdwan-nw-device/"
# WEB前端部署路徑
WEBAPPPATH="${HOME}/web/"
BASEVERSIONPATH="/home/example/nas/sdwan"
# VERSONDATE:版本部署日期
VERSIONDATE=$(date +"%Y%m%d")
# VERSIONPATH:版本下載存放路徑
VERSIONPATH="${BASEVERSIONPATH}/sdwan_version/${VERSIONDATE}"
# DBVERSIONPATH:版本數(shù)據(jù)庫(kù)sql腳本備份存放路徑
DBVERSIONPATH="${BASEVERSIONPATH}/db_version/${VERSIONDATE}"
# ZUULVERSIONPATH:網(wǎng)關(guān)微服務(wù)備份路徑
ZUULVERSIONPATH=$(find ${BASEVERSIONPATH}/zuul_version/ -name "${ZUULAPPNAME}"|tail -1|xargs -r dirname)
# SITEVERSIONPATH:site微服務(wù)備份路徑
SITEVERSIONPATH=$(find ${BASEVERSIONPATH}/site_version/ -name "${SITEAPPNAME}"|tail -1|xargs -r dirname)
# DEVICEVERSIONPATH:device微服務(wù)備份路徑
DEVICEVERSIONPATH=$(find ${BASEVERSIONPATH}/device_version/ -name "${DEVICEAPPNAME}"|tail -1|xargs -r dirname)
# WEBVERSIONPATH: web前端備份路徑
WEBVERSIONPATH=$(find ${BASEVERSIONPATH}/web_version/ -name "${WEBAPPNAME}"|tail -1|xargs -r dirname)
# 腳本執(zhí)行日志存放路徑
LOGPATH="/tmp/${HOSTNAME}_${VERSIONDATE}.log"
# ******************** DEFINE ARGS END ***********************************
# ******************** FUNCTION func_info BEGIN **************************
function func_info(){
cat<
參數(shù)說(shuō)明:
args1:回滾應(yīng)用名稱,寫參數(shù)時(shí)需去掉"<"">"
[zuul|site|device|web]
args2:要回滾的當(dāng)前版本號(hào)
1.1.0
示例:sh sdwan_version_rollback.sh zuul 1.1.0
EOF
}
# ******************** FUNCTION func_info END ***************************
# ******************** FUNCTION log_info BEGIN **************************
function log_info(){
echo "[$(date +'%Y-%m-%d %H:%M:%S')][INFO]"
}
# ******************** FUNCTION log_info END ***************************
# ******************** FUNCTION log_info BEGIN **************************
function log_error(){
echo "[$(date +'%Y-%m-%d %H:%M:%S')][ERROR]"
}
# ******************** FUNCTION log_info END ***************************
# ******************** FUNCTION rollback_app BEGIN *************************
function rollback_app(){
[ ! -f ${APPINFOFILE} ]&&{ echo "$(log_error)${APPINFOFILE}不存在";exit 110;}
case ${VERSION} in
"zuul")
CURRENTVERSION=$(cat ${APPINFOFILE}|grep "zuul_latest"|awk -F ':' '{print $2}')
ROLLBACKVERSION=$(cat ${APPINFOFILE}|grep "zuul_latest"|awk -F ':' '{print $2}')
[ "${V}" == "${CURRENTVERSION}" ]&&{ echo "$(log_info)要恢復(fù)版本號(hào)與當(dāng)前版本號(hào)相同,無(wú)需恢復(fù)"&& exit 0;}
cd ${ZUULVERSIONPATH}
if [ -f ${ZUULAPPNAME} ];then
CURRENTVERSIONNAME=$(echo ${ZUULAPPNAME}|sed -r "s/([0-9.]*)jar/${CURRENTVERSION}.jar/g")
rm -f ${ZUULAPPPATH}/${CURRENTVERSIONNAME}
cp -a ${ZUULVERSIONPATH}/${ZUULAPPNAME} ${ZUULAPPPATH}/ &>/dev/null
[ $? -eq 0 ]&&{ echo "$(log_info)回滾成功!";}||{ echo "$(log_error)回滾失敗!";exit 500;}
sed -i "s/zuul_latest_id:.*/zuul_latest_id:${V}/g" ${APPINFOFILE}
# 部署成功將當(dāng)前生產(chǎn)版本號(hào)保存至temporary_id
sed -i "s/zuul_last_id:.*/zuul_last_id:${CURRENTVERSION}/g" ${APPINFOFILE}
else
echo "$(log_error)${ZUULAPPNAME}不存在,無(wú)法回滾!"
exit 500
fi
;;
"site")
CURRENTVERSION=$(cat ${APPINFOFILE}|grep "site_latest"|awk -F ':' '{print $2}')
ROLLBACKVERSION=$(cat ${APPINFOFILE}|grep "site_latest"|awk -F ':' '{print $2}')
[ "${V}" == "${CURRENTVERSION}" ]&&{ echo "$(log_info)要恢復(fù)版本號(hào)與當(dāng)前版本號(hào)相同,無(wú)需恢復(fù)"&& exit 0;}
cd ${SITEVERSIONPATH}
if [ -f ${SITEAPPNAME} ];then
CURRENTVERSIONNAME=$(echo ${SITEAPPNAME}|sed -r "s/([0-9.]*)jar/${CURRENTVERSION}.jar/g")
rm -f ${SITEAPPPATH}/${CURRENTVERSIONNAME}
cp -a ${SITEVERSIONPATH}/${SITEAPPNAME} ${SITEAPPPATH}/ &>/dev/null
[ $? -eq 0 ]&&{ echo "$(log_info)回滾成功!";}||{ echo "$(log_error)回滾失敗!";exit 500;}
sed -i "s/site_latest_id:.*/site_latest_id:${V}/g" ${APPINFOFILE}
# 部署成功將當(dāng)前生產(chǎn)版本號(hào)保存至temporary_id
sed -i "s/site_last_id:.*/site_last_id:${CURRENTVERSION}/g" ${APPINFOFILE}
else
echo "$(log_error)${SITEAPPNAME}不存在,無(wú)法回滾!"
exit 500
fi
;;
"device")
CURRENTVERSION=$(cat ${APPINFOFILE}|grep "device_latest"|awk -F ':' '{print $2}')
ROLLBACKVERSION=$(cat ${APPINFOFILE}|grep "device_latest"|awk -F ':' '{print $2}')
[ "${V}" == "${CURRENTVERSION}" ]&&{ echo "$(log_info)要恢復(fù)版本號(hào)與當(dāng)前版本號(hào)相同,無(wú)需恢復(fù)"&& exit 0;}
cd ${DEVICEVERSIONPATH}
if [ -f ${DEVICEAPPNAME} ];then
CURRENTVERSIONNAME=$(echo ${DEVICEAPPNAME}|sed -r "s/([0-9.]*)jar/${CURRENTVERSION}.jar/g")
rm -f ${DEVICEAPPPATH}/${CURRENTVERSIONNAME}
cp -a ${DEVICEVERSIONPATH}/${DEVICEAPPNAME} ${DEVICEAPPPATH}/ &>/dev/null
[ $? -eq 0 ]&&{ echo "$(log_info)回滾成功!";}||{ echo "$(log_error)回滾失敗!";exit 500;}
sed -i "s/device_latest_id:.*/device_latest_id:${V}/g" ${APPINFOFILE}
# 部署成功將當(dāng)前生產(chǎn)版本號(hào)保存至temporary_id
sed -i "s/device_last_id:.*/device_last_id:${CURRENTVERSION}/g" ${APPINFOFILE}
else
echo "$(log_error)${DEVICEAPPNAME}不存在,無(wú)法回滾!"
exit 500
fi
;;
"web")
CURRENTVERSION=$(cat ${APPINFOFILE}|grep "web_latest"|awk -F ':' '{print $2}')
ROLLBACKVERSION=$(cat ${APPINFOFILE}|grep "web_latest"|awk -F ':' '{print $2}')
[ "${V}" == "${CURRENTVERSION}" ]&&{ echo "$(log_info)要恢復(fù)版本號(hào)與當(dāng)前版本號(hào)相同,無(wú)需恢復(fù)"&& exit 0;}
cd ${WEBVERSIONPATH}
if [ -f ${WEBAPPNAME} ];then
CURRENTVERSIONNAME=$(echo ${WEBAPPNAME}|cut -d '.' -f1)
rm -rf ${WEBAPPPATH}/${CURRENTVERSIONNAME}
tar -zxf ${WEBVERSIONPATH}/${WEBAPPNAME} -C ${WEBAPPPATH} &>/dev/null
[ $? -eq 0 ]&&{ echo "$(log_info)回滾成功!";}||{ echo "$(log_error)回滾失敗!";exit 500;}
sed -i "s/web_latest_id:.*/web_latest_id:${V}/g" ${APPINFOFILE}
# 部署成功將當(dāng)前生產(chǎn)版本號(hào)保存至temporary_id
sed -i "s/web_last_id:.*/web_last_id:${CURRENTVERSION}/g" ${APPINFOFILE}
else
echo "$(log_error)${WEBAPPNAME}不存在,無(wú)法回滾!"
exit 500
fi
;;
*)
echo "$(log_error)參數(shù)錯(cuò)誤,請(qǐng)重新輸入要操作版本"
func_info
exit 111
;;
esac
}
# ******************** FUNCTION rollback_app END ***************************
if [ ${#} -ne 2 ];then
echo "參數(shù)個(gè)數(shù)錯(cuò)誤"
func_info
exit 100
fi
rollback_app
看完上述內(nèi)容,你們掌握實(shí)現(xiàn)自動(dòng)上線服務(wù)腳本的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!