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

猜你喜欢

转载自blog.csdn.net/wuchunlin_it/article/details/84837168