Tomcat灰階發布shell指令碼(來自網路可以參考)

來源:互聯網
上載者:User

標籤:jdbc   存在   沒有   發布   sleep   test   測試   ansi   root   

java灰階指令碼

使用指令碼注意事項:
1、 發布機器需要能夠解析web伺服器主機名稱,並且配置ssh通訊
2、 變數中的目錄以及使用者等資訊需要自己建立,指令碼沒有做判斷自己建立。我這裡web伺服器是使用ansible進行部署的,相關目錄和使用者都會自動建立。
3、代碼的部署使用tag,但是代碼的更新使用軟串連來控制,復原則切換到上一個軟串連
4、由於java是編譯型語言,我們使用maven來進行編譯,所以需要安裝maven環境。
5、關於環境設定檔:設定檔為自己手動維護,每次都是刪除git倉庫拉取下來的設定檔,把對應環境的代碼檔案複製進編譯目錄進行編譯。

#!/bin/bash

# 設定時間變數
CTIME=$(date "+%Y-%m-%d-%H-%M")
# 項目名稱,建議和gitlab倉庫名稱一致
project=
# 本地代碼目錄(gitlab拉取代碼後存放目錄)
CODE_DIR=/data/gitlab/"$project"
# 臨時代碼目錄,用來修改設定檔和編譯打包代碼
TMP_DIR=/data/tmp/"$project"
# 用來存放war包
WAR_DIR=/data/war/"$project"
# 對應環境設定檔
deploy_conf=/data/conf/pro/"$project"/*
# 代碼中的設定檔路徑
local_conf=$TMP_DIR/src/main/resources/config
# 遠程主機名稱
REMOTE_HOST="tomcat-01 tomcat-02"
# 遠程主機代碼目錄
REMOTE_CODE_DIR=/data/webapps/"$project"
# 遠程主機使用者
REMOTE_USER=root
# 遠程主機war包存放目錄
REMOTE_WAR_DIR=/data/war/
# 代碼臨時目錄
CODE_TMP=/data/code_tmp/
# 上線日誌
DEPKOY_LOG=/data/log/pro_log.log

# 指令碼使用協助
usage(){
echo $"Usage: $0 [deploy tag | rollback_list | rollback_pro ver]"
}

# 拉取代碼
git_pro(){
if [ $# -lt 1 ];then
echo "請傳入tag"
exit 1
fi
tag=$1
cd $CODE_DIR && git checkout master && git pull && git checkout $1
if [ $? != 0 ];then
echo "拉取代碼失敗"
exit 10
fi
cd $CODE_DIR && git pull 2>/dev/null >/dev/null
# 推送代碼到臨時目錄
rsync -avz --delete $CODE_DIR/ $TMP_DIR/ 2>/dev/null >/dev/null
}

# 設定代碼的設定檔
config_pro(){
echo "設定代碼設定檔"
rm -f $local_conf/config.properties
rm -f $local_conf/alipay.properties
rm -f $local_conf/jdbc.properties
rm -f $local_conf/log4j.properties
cp $deploy_conf $local_conf/
}

# 打包代碼
tar_pro(){
echo "本地打包代碼"
cd $TMP_DIR && /usr/local/maven/bin/mvn clean compile war:war && cp target/"$project".war "$WAR_DIR"/"$project"_"$tag"_"$CTIME".war
}

# 推送war包到遠端伺服器
rsync_pro(){
echo "推送war包到遠端伺服器"
for host in $REMOTE_HOST;do
scp "$WAR_DIR"/"$project"_"$tag"_"$CTIME".war [email protected]$host:$REMOTE_WAR_DIR
done
}

# 解壓程式碼封裝
solution_pro(){
echo "解壓程式碼封裝"
for host in $REMOTE_HOST;do
ssh [email protected]$host "unzip "$REMOTE_WAR_DIR""$project"_"$tag"_"$CTIME".war -d "$CODE_TMP""$project"_"$tag"_"$CTIME"" 2>/dev/null >/dev/null
done
}

# api測試
test_pro(){
# 運行api測試指令碼,如果api測試有問題,則退出部署
if [ $? != 0 ];then
echo "API測試存在問題,退出部署"
exit 10
fi
}


# 部署代碼
deploy_pro(){
echo "部署代碼"
for host in $REMOTE_HOST;do
ssh haproxy "echo "disable server $project/$host" | /usr/bin/socat /var/lib/haproxy/stats stdio"
ssh [email protected]$host "rm -r $REMOTE_CODE_DIR"
ssh [email protected]$host "ln -s "$CODE_TMP""$project"_"$tag"_"$CTIME"/ $REMOTE_CODE_DIR"
echo "重啟$host"
ssh [email protected]$host "/etc/init.d/tomcat restart"
sleep 3
# 執行api測試
test_pro
ssh haproxy "echo "enable server $project/$host" | /usr/bin/socat /var/lib/haproxy/stats stdio"
done
}
# 列出可以復原的版本
rollback_list(){
echo "------------可復原版本-------------"
ssh [email protected]$REMOTE_HOST "ls -r "$CODE_TMP" | grep -o $project.*"
}

# 復原代碼
rollback_pro(){
echo "復原中"
for host in $REMOTE_HOST;do
ssh haproxy "echo "disable server $project/$host" | /usr/bin/socat /var/lib/haproxy/stats stdio"
ssh [email protected]$host "rm -rf $REMOTE_CODE_DIR"
ssh [email protected]$host "ln -s "$CODE_TMP"$1/ $REMOTE_CODE_DIR"
ssh [email protected]$host "/etc/init.d/tomcat restart"
sleep 3
ssh haproxy "echo "enable server $project/$host" | /usr/bin/socat /var/lib/haproxy/stats stdio"
done
}

# 記錄日誌
record_log(){
echo "$CTIME 主機:$REMOTE_HOST 項目:$project tag:$1" >> $DEPKOY_LOG
}

# 代碼執行選項設定
main(){
case $1 in
deploy)
git_pro $2;
config_pro;
tar_pro;
rsync_pro;
solution_pro;
deploy_pro;
record_log $2;
;;
rollback_list)
rollback_list;
;;
rollback_pro)
rollback_pro $2;
record_log;
;;
*)
usage;
esac
}
main $1 $2

Tomcat灰階發布shell指令碼(來自網路可以參考)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.