环境 :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