1. 程式人生 > >tomcat全自動打包並自動部署指令碼

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