tomcat+svn+shell進行全環境適配部署打包
之前寫了個tomcat全自動打包並自動部署指令碼 https://blog.csdn.net/wuchunlin_it/article/details/84837168,該指令碼實現針對某一環境進行自動打包部署,但好景不長,開發和測試環境打包的目錄環境變了,要麼重寫,要麼修改指令碼,而且還新增了其他環境 ⊙﹏⊙‖∣。
為了不再重寫指令碼或者修改,思慮了3分鐘,為了能夠每天多玩幾把lol,想到了用選單方式,選擇打包的路徑和部署到某一個tomcat下,實現全環境適配,若後續有新環境,直接網腳本里面新增就可以了(複製貼上其他環境,然後改改路徑和埠就可以了)
廢話不多說,昨天改指令碼已經寫完(未優化,暫時沒那個精力),並且測試了開發和測試環境,沒出啥問題,就把指令碼發出來,求大神們提提意見
#!/bin/bash
#######General deployment#######
cat <<EOF
svn的打包路徑
(a)@{svn_dir}/java/branches/hg-api
(b)@{svn_dir}/java/branches/hg-ops
(c)@{svn_dir}/java/tags/hg-api-1.1.0
(d)@{svn_dir}/java/tags/hg-ops-1.1.0
EOF
read -p "根據提示,選擇打包的路徑:" input
if [[ $input =~ [a-d] ]]; then
case $input in
a)
cd /home/svn_client/java/branches/hg-api
cat <<EOF
(a)打開發環境的包(dev)
(b)打測試環境的包(test)
(c)打tag環境的包(tag-patch)
EOF
read -p "根據提示,請輸入你需要打成什麼環境的包: " input
if [[ $input =~ [a-c] ]]; then
case $input in
a)
svn update
mvn clean package -Pdev
if [[ $? -eq 0 ]]; then
mv ./target/*.war /data/deployment_war
echo "打包成功,且將包移動到/data/deployment_war"
else
echo "打包失敗"
exit 2
fi
;;
b)
svn update
mvn clean package -Ptest
if [[ $? -eq 0 ]]; then
mv ./target/*.war /data/deployment_war
echo "打包成功,且將包移動到/data/deployment_war"
else
echo "打包失敗"
exit 2
fi
;;
c)
svn update
mvn clean package -Ptag-patch
if [[ $? -eq 0 ]]; then
mv ./target/*.war /data/deployment_war
echo "打包成功,且將包移動到/data/deployment_war"
else
echo "打包失敗"
exit 2
fi
;;
esac
else
echo "輸入失敗,請重新選擇"
exit 2
fi
;;
b)
cd /home/svn_client/java/branches/hg-ops
cat <<EOF
(a)打開發環境的包(dev)
(b)打測試環境的包(test)
(c)打tag環境的包(tag-patch)
EOF
read -p "根據提示,請輸入你需要打成什麼環境的包: " input
if [[ $input =~ [a-c] ]]; then
case $input in
a)
svn update
mvn clean package -Pdev
if [[ $? -eq 0 ]]; then
mv ./target/*.war /data/deployment_war
echo "打包成功,且將包移動到/data/deployment_war"
else
echo "打包失敗"
exit 2
fi
;;
b)
svn update
mvn clean package -Ptest
if [[ $? -eq 0 ]]; then
mv ./target/*.war /data/deployment_war
echo "打包成功,且將包移動到/data/deployment_war"
else
echo "打包失敗"
exit 2
fi
;;
c)
svn update
mvn clean package -Ptag-patch
if [[ $? -eq 0 ]]; then
mv ./target/*.war /data/deployment_war
echo "打包成功,且將包移動到/data/deployment_war"
else
echo "打包失敗"
exit 2
fi
;;
esac
else
echo "輸入失敗,請重新選擇"
exit 2
fi
;;
c)
cd /home/svn_client/java/tags/hg-api-1.1.0
cat <<EOF
(a)打開發環境的包(dev)
(b)打測試環境的包(test)
(c)打tag環境的包(tag-patch)
EOF
read -p "根據提示,請輸入你需要打成什麼環境的包: " input
if [[ $input =~ [a-c] ]]; then
case $input in
a)
svn update
mvn clean package -Pdev
if [[ $? -eq 0 ]]; then
mv ./target/*.war /data/deployment_war
echo "打包成功,且將包移動到/data/deployment_war"
else
echo "打包失敗"
exit 2
fi
;;
b)
svn update
mvn clean package -Ptest
if [[ $? -eq 0 ]]; then
mv ./target/*.war /data/deployment_war
echo "打包成功,且將包移動到/data/deployment_war"
else
echo "打包失敗"
exit 2
fi
;;
c)
svn update
mvn clean package -Ptag-patch
if [[ $? -eq 0 ]]; then
mv ./target/*.war /data/deployment_war
echo "打包成功,且將包移動到/data/deployment_war"
else
echo "打包失敗"
exit 2
fi
;;
esac
else
echo "輸入失敗,請重新選擇"
exit 2
fi
;;
d)
cd /home/svn_client/java/tags/hg-ops-1.1.0
cat <<EOF
(a)打開發環境的包(dev)
(b)打測試環境的包(test)
(c)打tag環境的包(tag-patch)
EOF
read -p "根據提示,請輸入你需要打成什麼環境的包: " input
if [[ $input =~ [a-c] ]]; then
case $input in
a)
svn update
mvn clean package -Pdev
if [[ $? -eq 0 ]]; then
mv ./target/*.war /data/deployment_war
echo "打包成功,且將包移動到/data/deployment_war"
else
echo "打包失敗"
exit 2
fi
;;
b)
svn update
mvn clean package -Ptest
if [[ $? -eq 0 ]]; then
mv ./target/*.war /data/deployment_war
echo "打包成功,且將包移動到/data/deployment_war"
else
echo "打包失敗"
exit 2
fi
;;
c)
svn update
mvn clean package -Ptag-patch
if [[ $? -eq 0 ]]; then
mv ./target/*.war /data/deployment_war
echo "打包成功,且將包移動到/data/deployment_war"
else
echo "打包失敗"
exit 2
fi
;;
esac
else
echo "輸入失敗,請重新選擇"
exit 2
fi
;;
esac
else
echo "輸入失敗,請重新選擇"
exit 2
fi
echo "接下來請選擇需要部署到tomcat的環境"
sleep 2
cat <<EOF
請選擇需要部署的tomcat
(a)tomcat8081dev [dev 8081 api]
(b)tomcat8082test [test 8082 api]
(c)tomcat8083pre [pre 8083 api]
(d)tomcat8084dev-ops [dev 8084 ops]
(e)tomcat8085test-ops [test 8085 ops]
(f)tomcat8087tags [tag 8087 api+ops]
EOF
read -p "根據提示,選擇需要部署的tomcat:" input
if [[ $input =~ [a-f] ]]; then
case $input in
a)
PROCESS1=`netstat -tunlp|grep 8081|awk -F '[ /]+' '{print $7}'`
PORT1=`netstat -tunlp|grep 8081`
if [[ $? -eq 0 ]]; then
echo "服務啟動中,程序為$PROCESS1"
kill -9 $PROCESS1
echo "以為你殺掉程序$PROCESS1"
else
echo "服務未啟動,無需重複停止"
fi
sleep 1
rm -rf /data/tomcat8081dev/webapps/*
rm -rf /data/tomcat8081dev/work/Catalina/*
echo "清除快取完畢"
sleep 1
mv /data/deployment_war/hg-api.war /data/tomcat8081dev/webapps/
if [[ $? -eq 0 ]]; then
echo "war包更新成功"
else
echo "war包更新失敗"
exit 2
fi
sleep 1
/data/tomcat8081dev/bin/startup.sh
sleep 1
echo "服務啟動中,請輸入work-menu命令檢視後臺日誌"
;;
b)
PROCESS2=`netstat -tunlp|grep 8082|awk -F '[ /]+' '{print $7}'`
PORT2=`netstat -tunlp|grep 8082`
if [[ $? -eq 0 ]]; then
echo "服務啟動中,程序為$PROCESS2"
kill -9 $PROCESS2
echo "以為你殺掉程序$PROCESS2"
else
echo "服務未啟動,無需重複停止"
fi
sleep 1
rm -rf /data/tomcat8082test/webapps/*
rm -rf /data/tomcat8082test/work/Catalina/*
echo "清除快取完畢"
sleep 1
mv /data/deployment_war/hg-api.war /data/tomcat8082test/webapps/
if [[ $? -eq 0 ]]; then
echo "war包更新成功"
else
echo "war包更新失敗"
exit 2
fi
sleep 1
/data/tomcat8082test/bin/startup.sh
sleep 1
echo "服務啟動中,請輸入work-menu命令檢視後臺日誌"
;;
c)
PROCESS3=`netstat -tunlp|grep 8083|awk -F '[ /]+' '{print $7}'`
PORT3=`netstat -tunlp|grep 8083`
if [[ $? -eq 0 ]]; then
echo "服務啟動中,程序為$PROCESS3"
kill -9 $PROCESS3
echo "以為你殺掉程序$PROCESS3"
else
echo "服務未啟動,無需重複停止"
fi
sleep 1cat <<EOF
更新pre的什麼服務
(a)pre-api
(b)pre-ops
EOF
read -p "根據提示,選擇需要部署的tomcat:" input
if [[ $input =~ [a-b] ]]; then
case $input in
a)
rm -rf /data/tomcat8083pre/webapps/hg-api*
rm -rf /data/tomcat8083pre/webapps/hg-ops
rm -rf /data/tomcat8083pre/work/Catalina/*
echo "清除快取完畢"
sleep 1
mv /data/deployment_war/hg-api.war /data/tomcat8083pre/webapps/
if [[ $? -eq 0 ]]; then
echo "war包更新成功"
else
echo "war包更新失敗"
exit 2
fi
;;
b)
rm -rf /data/tomcat8083pre/webapps/hg-api
rm -rf /data/tomcat8083pre/webapps/hg-ops*
rm -rf /data/tomcat8083pre/work/Catalina/*
echo "清除快取完畢"
sleep 1
mv /data/deployment_war/hg-ops.war /data/tomcat8083pre/webapps/
if [[ $? -eq 0 ]]; then
echo "war包更新成功"
else
echo "war包更新失敗"
exit 2
fi
;;
esac
else
echo "執行失敗,請重新選擇"
exit 2
fi
sleep 1
/data/tomcat8083pre/bin/startup.sh
sleep 1
echo "服務啟動中,請輸入work-menu命令檢視後臺日誌"
;;
d)
PROCESS4=`netstat -tunlp|grep 8084|awk -F '[ /]+' '{print $7}'`
PORT4=`netstat -tunlp|grep 8084`
if [[ $? -eq 0 ]]; then
echo "服務啟動中,程序為$PROCESS4"
kill -9 $PROCESS4
echo "以為你殺掉程序$PROCESS4"
else
echo "服務未啟動,無需重複停止"
fi
sleep 1
rm -rf /data/tomcat8084dev-ops/webapps/*
rm -rf /data/tomcat8084dev-ops/work/Catalina/*
echo "清除快取完畢"
sleep 1
mv /data/deployment_war/hg-ops.war /data/tomcat8084dev-ops/webapps/
if [[ $? -eq 0 ]]; then
echo "war包更新成功"
else
echo "war包更新失敗"
exit 2
fi
sleep 1
/data/tomcat8084dev-ops/bin/startup.sh
sleep 1
echo "服務啟動中,請輸入work-menu命令檢視後臺日誌"
;;
e)
PROCESS5=`netstat -tunlp|grep 8085|awk -F '[ /]+' '{print $7}'`
PORT5=`netstat -tunlp|grep 8085`
if [[ $? -eq 0 ]]; then
echo "服務啟動中,程序為$PROCESS5"
kill -9 $PROCESS5
echo "以為你殺掉程序$PROCESS5"
else
echo "服務未啟動,無需重複停止"
fi
sleep 1
rm -rf /data/tomcat8085test-ops/webapps/*
rm -rf /data/tomcat8085test-ops/work/Catalina/*
echo "清除快取完畢"
sleep 1
mv /data/deployment_war/hg-ops.war /data/tomcat8085test-ops/webapps/
if [[ $? -eq 0 ]]; then
echo "war包更新成功"
else
echo "war包更新失敗"
exit 2
fi
sleep 1
/data/tomcat8085test-ops/bin/startup.sh
sleep 1
echo "服務啟動中,請輸入work-menu命令檢視後臺日誌"
;;
f)
PROCESS6=`netstat -tunlp|grep 8087|awk -F '[ /]+' '{print $7}'`
PORT6=`netstat -tunlp|grep 8087`
if [[ $? -eq 0 ]]; then
echo "服務啟動中,程序為$PROCESS6"
kill -9 $PROCESS6
echo "以為你殺掉程序$PROCESS6"
else
echo "服務未啟動,無需重複停止"
fi
sleep 1
rm -rf /data/tomcat8087tags/webapps/*
rm -rf /data/tomcat8087tags/work/Catalina/*
echo "清除快取完畢"
sleep 1
mv /data/deployment_war/hg-ops.war /data/tomcat8087tags/webapps/
if [[ $? -eq 0 ]]; then
echo "war包更新成功"
else
echo "war包更新失敗"
exit 2
fi
sleep 1
/data/tomcat8087tags/bin/startup.sh
sleep 1
echo "服務啟動中,請輸入work-menu命令檢視後臺日誌"
;;
esac
else
echo "執行失敗,請根據提示從新輸入"
exit 2
fi
該指令碼未優化,自己也懶得優化了(目前還有預上線環境和tag環境,正式環境沒有測)