tomcat全自動打包並自動部署指令碼
環境 :centos + svn(git都可以) + maven +tomcat
說明:該指令碼只適用於本公司環境,目前用於開發,測試以及正式環境
可根據自己公司的環境進行相應的修改
大神請忽略
本文以測試環境為例
____________________________________________________________________________
打包指令碼 mvntestapi.sh
_________________________________________________________________________
#!/bin/sh
##這是給釘釘群發訊息,當然也可以發微信群或郵件,但我不喜歡郵件的方式
/usr/bin/curl 'https://oapi.dingtalk.com/robot/send?access_token=釘釘機器人號碼' \
-H 'Content-Type: application/json' \
-d '
{"msgtype": "text",
"text": {
"content": "測試環境api正在打包當中,馬上更新服務"
}
}'
echo "進入api開發目錄"
cd /home/svn_client/java/branches/hg-api
echo "svn更新中,請稍等"
svn update
echo "更新成功,準備編譯打包,請稍後"
/usr/local/maven3.5.0/bin/mvn clean package -Ptest
if [[ $? -eq 0 ]]; then
echo "打包成功,正在更新服務,請稍後"
sleep 1
/home/scripts/testapi.sh ##打包成功後執行另外一個部署war包指令碼,當然也可以寫一起
else
/usr/bin/curl 'https://oapi.dingtalk.com/robot/send?access_token=釘釘機器人號' \
-H 'Content-Type: application/json' \
-d '
{"msgtype": "text",
"text": {
"content": "打包失敗,test-hg-api.war服務更新失敗"
}
}'
fi
-------------------------------------------------------------------------------------------------------------------------
部署指令碼 testapi.sh 這是最開始寫的,100多行,我人都懵逼了
後面會放簡化過的指令碼
-------------------------------------------------------------------------------------------------------------------------
#!/bin/sh
##nginx拒絕請求 因為測試環境伺服器只有一臺,所以只做了拒絕請求,2臺的話可以做無縫更新,不影響使用者體驗
/usr/bin/sed -i "s/#return/return/g" /data/nginx/conf/test.conf
/usr/local/nginx/sbin/nginx -s reload
sleep 1
PID=`netstat -tunlp|grep 8082|awk -F '[ /]+' '{print $7}'`
/usr/bin/netstat -tunlp|grep 8082
if [[ $? -eq 0 ]]; then
echo "你的tomcat8082test的程序號為$PID"
kill -9 $PID
echo "以為你殺死程序號$PID"
echo "正在為你更換新的hg-api.war包,請稍等"
rm -rf /data/tomcat8082test/webapps/hg-api*
sleep 3
mv /home/svn_client/java/branches/hg-api/target/hg-api.war /data/tomcat8082test/webapps/
if [[ $? -eq 0 ]]; then
echo "更換完畢"
rm -rf /data/tomcat8082test/work/Catalina/localhost
echo "清除快取,請稍等"
echo "清除完畢"
sleep 1
/data/tomcat8082test/bin/startup.sh
echo "更新服務,請稍後" && /usr/bin/curl 'https://oapi.dingtalk.com/robot/send?access_token=釘釘機器人號' \
-H 'Content-Type: application/json' \
-d '
{"msgtype": "text",
"text": {
"content": "打包成功,dev-hg-api.war服務正在更新重啟中,大約30秒"
}
}'
else
echo "更換失敗,請重試"
fi
sleep 1
cd /home/svn_client/java/branches/hg-api
###查出svn的提交者以及更新日誌
SUBMITTER=`svn log|head|awk -F '|' '{print $2}'|egrep "^$" -v|head -n 1`
MODIFICATION=`svn log|head|egrep "^$|[-]+" -v|head -n 1`
echo " "
echo "提交者($SUBMITTER)"
echo "修改內容($MODIFICATION)"
sleep 35
/usr/bin/netstat -tunlp|grep 8082
if [[ $? -eq 0 ]]; then
echo "測試環境api服務啟動成功"
/usr/bin/curl 'https://oapi.dingtalk.com/robot/send?access_token=釘釘機器人號' \
-H 'Content-Type: application/json' \
-d '
{"msgtype": "text",
"text": {
"content": "測試環境api服務啟動成功,更新內容=>'$MODIFICATION'"
}
}'
else
echo "測試環境api服務啟動失敗"
/usr/bin/curl 'https://oapi.dingtalk.com/robot/send?access_token=釘釘機器人號' \
-H 'Content-Type: application/json' \
-d '
{"msgtype": "text",
"text": {
"content": "測試環境api服務啟動失敗"
}
}'
fi
else
echo "測試環境api服務未啟動,無需停止"
echo "正在為你更換新的hg-api.war包,請稍等"
rm -rf /data/tomcat8082test/webapps/hg-api*
sleep 3
mv /home/svn_client/java/branches/hg-api/target/hg-api.war /data/tomcat8082test/webapps/
if [[ $? -eq 0 ]]; then
echo "更換完畢"
rm -rf /data/tomcat8082test/work/Catalina/localhost
echo "清除快取,請稍等"
echo "清除完畢"
sleep 1
/data/tomcat8082test/bin/startup.sh
echo "更新服務,請稍後" && /usr/bin/curl 'https://oapi.dingtalk.com/robot/send?access_token=釘釘機器人號' \
-H 'Content-Type: application/json' \
-d '
{"msgtype": "text",
"text": {
"content": "打包成功,dev-hg-api.war服務正在更新重啟中,大約30秒"
}
}'
else
echo "更換失敗,請重試"
fi
sleep 1
cd /home/svn_client/java/branches/hg-api
SUBMITTER=`svn log|head|awk -F '|' '{print $2}'|egrep "^$" -v|head -n 1`
MODIFICATION=`svn log|head -n 5|grep -v '^$'|grep -v '^-'|tail -n 1`
echo " "
echo "提交者($SUBMITTER)"
echo "修改內容($MODIFICATION)"
sleep 35
/usr/bin/netstat -tunlp|grep 8082
if [[ $? -eq 0 ]]; then
echo "測試環境api服務啟動成功"
/usr/bin/curl 'https://oapi.dingtalk.com/robot/send?access_token=釘釘機器人號' \
-H 'Content-Type: application/json' \
-d '
{"msgtype": "text",
"text": {
"content": "測試環境api服務啟動成功,更新內容=>'$MODIFICATION'"
}
}'
else
echo "測試環境api服務啟動失敗"
/usr/bin/curl 'https://oapi.dingtalk.com/robot/send?access_token=釘釘機器人號' \
-H 'Content-Type: application/json' \
-d '
{"msgtype": "text",
"text": {
"content": "測試環境api服務啟動失敗"
}
}'
fi
fi
##註釋nginx拒絕請求
/usr/bin/sed -i "s/return/#return/g" /data/nginx/conf/test.conf
/usr/local/nginx/sbin/nginx -s reload
----------------------------------------------------------------------------------------------------------------------------------------------
下面放簡化版部署指令碼 testapi.sh
把釘釘訊息分開寫
---------------------------------------------------------------------------------------------------------------------------------------------
#!/bin/sh
PID=`netstat -tunlp|grep 8082|awk -F '[ /]+' '{print $7}'`
/usr/bin/netstat -tunlp|grep 8082
if [[ $? -eq 0 ]]; then
echo "你的tomcat8082的程序號為$PID"
kill -9 $PID
echo "以為你殺死程序號$PID"
echo "正在為你更換新的hg-api.war包,請稍等"
else
echo "測試環境api服務未啟動,無需停止"
echo "正在為你更換新的hg-api.war包,請稍等"
fi
rm -rf /data/tomcat8085test-ops/webapps/hg-api*
sleep 3
mv /home/svn_client/java/branches/hg-ops/target/hg-ops.war /data/tomcat8085test-ops/webapps/
if [[ $? -eq 0 ]]; then
echo "更換完畢"
rm -rf /data/tomcat8082/work/Catalina/localhost
echo "清除快取,請稍等"
echo "清除完畢"
sleep 1
/data/tomcat8082/bin/startup.sh
/home/scripts/test/MQ/OMQ1 ##釘釘訊息,可以不用
echo "更新服務,請稍後"
else
echo "更換失敗,請重試"
fi
sleep 26
/usr/bin/netstat -tunlp|grep 8082
if [[ $? -eq 0 ]]; then
echo "測試環境ops服務啟動成功"
/home/scripts/test/MQ/OMQ2
else
echo "測試環境ops服務啟動失敗"
/home/scripts/test/MQ/OMQ3
fi
---------------------------------------------------------------------------------------------------
釘釘訊息 OMQ (可以不用)
---------------------------------------------------------------------------------------------------
#!/bin/bash
MQ1=`/usr/bin/curl 'https://oapi.dingtalk.com/robot/send?access_token=釘釘機器人號' \
-H 'Content-Type: application/json' \
-d '
{"msgtype": "text",
"text": {
"content": "打包成功,dev-hg-ops.war服務正在更新重啟中,大約25秒"
}
}'`
----------------------------------------------------------------------------------------------------------------------
配合jenkins給開發人員使用
-----------------------------------------------------------------------------------------------------------
總結:改指令碼適合自己使用,若開發人員使用,需要結合jenkins執行指令碼,不建議正式環境也用jenkins