之前写了个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环境,正式环境没有测)