1. 程式人生 > >自動化部署

自動化部署

解決 項目 env 針對 sdk 端口號 之前 please 缺點

---恢復內容開始---

背景:

作為一個運維方面還算可以的小白,很自然部門中關於一些運維,部署,監控的任務就落到我身上。在被小夥伴們無數次的呼喚解決項目部署問題後,我忍無可忍,所以,我的目標是把他們交給我的部

署任務完美的退回去,即使他們對Linux一無所知。

解決的問題:

 頻繁的部署,重啟任務。

主要項目描述:

項目總有13個模塊,spring boot 項目,啟動模塊有10個。

前提:

  主管項目後臺模塊架構設計,參與大部分開發任務,使平臺提供運維支持成為可能。由於項目在 不斷擴展期間,所以,部署工作十分繁重,嚴重浪費了我的時間。

達到目標:

  1. 通過sh run.sh module env 啟動項目

  2. 通過 sh shutdown.sh module env 停掉項目

  3. 通過sh run_all.sh env 啟動所有項目

  4. 通過 sh shutdown_all.sh module env 停掉項目

  5. 通過 sh clear.sh 清理服務器上七天以前的日誌文件以及備份jar包

技術支持:

  scp 執行文件上傳

  ssh 遠程執行本地腳本文件

項目架構規範(針對運維部分)

  1. 項目提供dev,uat,www環境的文件配置

  2. spring boot 項目maven管理

  3. 配置文件必須在模塊目錄下conf中application-env.properties

  4. 啟動端口必須配置在配置文件中

  5. 模塊打包為 Project_module.jar

  6. 模塊名字規範: Project_module

遠程執行腳本

  1. run_script.sh(遠程啟動腳本)

    通過端口殺掉進程,通過模塊名啟動模塊。

#! /bin/bash
echo $1,$2,$3
cd ~/ITS_service/$2/
pwd
pid=`/usr/sbin/lsof -t -i:$3
` echo $pid if [ $pid != "" ] then kill -9 $pid sleep 3 nohup java -jar ITS_$1.jar & else echo "端口不存在。。。。。。。。" nohup java -jar ITS_$1.jar & fi

  2. shutdown_script.sh(遠程停止腳本)

    通過端口殺掉進程。

#!/usr/bin/env bash
pid=`/usr/sbin/lsof -t -i:$1`
echo $pid
if [ $pid != "" ]
then
   exec kill -9 $pid
   echo "---------------進程已關閉----------------"
else
   echo "端口不存在。。。。。。。。"
fi

  3. clear_script.sh(遠程清理腳本)

    清理任務清理所有。

#!/bin/bash

      # 要清理的目錄,多個目錄用空格分開
      logs=(/home/tomcat/ITS_service/www/logs /home/tomcat/ITS_service/dev/logs /home/tomcat/ITS_service/uat/logs)

      # 循環 logs 數組
      for dir in ${logs[*]}
        do
          # 刪除目錄下 7 天之前的日誌文件
          find $dir -mtime +7 -name *.log* | xargs rm
        done

      # 要清理的目錄,多個目錄用空格分開
      jars=(/home/tomcat/ITS_service/www /home/tomcat/ITS_service/dev /home/tomcat/ITS_service/uat)

      # 循環 jars 數組
      for dir in ${jars[*]}
        do
          # 刪除目錄下 7 天之前的備份jar包
          find $dir -mtime +7 -name backup* | xargs rm -rf
        done

  

  4. backup_script.sh(備份jar包)

    通過 模塊環境,模塊名字備份jar。

#! /bin/bash
echo $1,$2
cd ~/ITS_service/$2/
pwd
t=`date "+%Y-%m-%d-%H"`
Ddate=`date "+%Y-%m-%d"`
folder=~/ITS_service/$2/backup_$Ddate/
echo "備份ITS_$1.jar.............."
if [ ! -d "$folder" ]; then
  mkdir -p "$folder"
fi
cp ITS_$1.jar $folder/ITS_$1_backup_$t.jar
 

  

本地執行腳本

  1. run.sh

  通過模塊名字環境名字打包,獲取端口,通過調用(backup_script.sh)備份jar包,通過上傳命令上傳jar,通過調用啟動遠程腳本(run_script.sh)啟動。

#!/usr/bin/env bash
#cd ./ITS_core
#mvn clean && mvn install -Dmaven.test.skip=true
#cd ..
#cd ./ITS_sdk
#mvn clean && mvn install -Dmaven.test.skip=true
#cd ..
#cd ./ITS_context
#mvn clean && mvn install -Dmaven.test.skip=true
#cd ..
cd ./ITS_$1
port=`cat ./src/main/resources/config/application-$2.properties | grep server.port | awk -F = {print $2}`
echo "port:${port}"
mvn clean
mvn package -P$2 -Dmaven.test.skip=true
cd target
DEV=dev
WWW=www
UAT=uat
DEV_HOST=`cat ../../host.properties | grep dev.host | awk -F = {print $2}`
UAT_HOST=`cat ../../host.properties | grep uat.host | awk -F = {print $2}`
WWW_HOST=`cat ../../host.properties | grep www.host | awk -F = {print $2}`
    echo "----------------開始執行$2環境$1項目的部署-------------------------"
if [ "$2" == ${DEV} ]
then
     OLD_IFS="$IFS"
                     IFS=","
                     arr=($DEV_HOST)
                     IFS="$OLD_IFS"
                     for host in ${arr[@]}
                     do
                      echo "-----------當前運維的機器ip是:$host--------------------"
                      echo "Please input y or n "
                      read
                      if [ "$REPLY" == "y" ]
                      then
                        ssh -C tomcat@$host "bash -s" < ../../backup_script.sh $1 $2
                        scp ITS_$1.jar tomcat@$host:/home/tomcat/ITS_service/$2/ITS_$1.jar
                        ssh -C tomcat@$host "bash -s" < ../../run_script.sh $1 $2 ${port}
                      else
                         echo "。。。。。。。。。"
                      fi
                     done
fi
if [ "$2" == ${WWW} ]
then
      OLD_IFS="$IFS"
                           IFS=","
                           arr=($WWW_HOST)
                           IFS="$OLD_IFS"
                           for host in ${arr[@]}
                           do
                            echo "-----------當前運維的機器ip是:$host--------------------"
                            echo "Please input y or n "
                            read
                            if [ "$REPLY" == "y" ]
                            then
                              ssh -C tomcat@$host "bash -s" < ../../backup_script.sh $1 $2
                              scp ITS_$1.jar tomcat@$host:/home/tomcat/ITS_service/$2/ITS_$1.jar
                              ssh -C tomcat@$host "bash -s" < ../../run_script.sh $1 $2 ${port}
                            else
                               echo "。。。。。。。。。"
                            fi
                           done
fi
if [ "$2" == ${UAT} ]
then
      OLD_IFS="$IFS"
                           IFS=","
                           arr=($UAT_HOST)
                           IFS="$OLD_IFS"
                           for host in ${arr[@]}
                           do
                            echo "-------------------當前運維的機器ip是:$host--------------------"
                            echo "Please input y or n "
                            read
                            if [ "$REPLY" == "y" ]
                            then
                              ssh -C tomcat@$host "bash -s" < ../../backup_script.sh $1 $2
                              scp ITS_$1.jar tomcat@$host:/home/tomcat/ITS_service/$2/ITS_$1.jar
                              ssh -C tomcat@$host "bash -s" < ../../run_script.sh $1 $2 ${port}
                            else
                               echo "。。。。。。。。。"
                            fi
                           done
fi
 

  

  2. run_uninstall.sh

  和上面不通是只進行啟動不上傳。

#!/usr/bin/env bash
cd ./ITS_$1
port=`cat ./src/main/resources/config/application-$2.properties | grep server.port | awk -F = {print $2}`
echo "port:${port}"
DEV=dev
WWW=www
UAT=uat
echo "-------------------------開始執行$2環境$1項目的部署-------------------------"
cd ..
DEV_HOST=`cat ./host.properties | grep dev.host | awk -F = {print $2}`
UAT_HOST=`cat ./host.properties | grep uat.host | awk -F = {print $2}`
WWW_HOST=`cat ./host.properties | grep www.host | awk -F = {print $2}`
if [ "$2" == ${DEV} ]
then
    OLD_IFS="$IFS"
                IFS=","
                arr=($DEV_HOST)
                IFS="$OLD_IFS"
                for host in ${arr[@]}
                do
                 echo "-----------當前運維的機器ip是:$host--------------------"
                 echo "Please input y or n "
                 read
                 if [ "$REPLY" == "y" ]
                 then
                   ssh -C tomcat@$host "bash -s" < ./run_script.sh $1 $2 ${port}
                 else
                    echo "。。。。。。。。。"
                 fi
                done
fi
if [ "$2" == ${WWW} ]
then
    OLD_IFS="$IFS"
                    IFS=","
                    arr=($WWW_HOST)
                    IFS="$OLD_IFS"
                    for host in ${arr[@]}
                    do
                     echo "-----------當前運維的機器ip是:$host--------------------"
                     echo "Please input y or n "
                     read
                     if [ "$REPLY" == "y" ]
                     then
                       ssh -C tomcat@$host "bash -s" < ./run_script.sh $1 $2 ${port}
                     else
                        echo "。。。。。。。。。"
                     fi
                    done
fi
if [ "$2" == ${UAT} ]
then
    OLD_IFS="$IFS"
                    IFS=","
                    arr=($UAT_HOST)
                    IFS="$OLD_IFS"
                    for host in ${arr[@]}
                    do
                     echo "-----------當前運維的機器ip是:$host--------------------"
                     echo "Please input y or n "
                     read
                     if [ "$REPLY" == "y" ]
                     then
                       ssh -C tomcat@$host "bash -s" < ./run_script.sh $1 $2 ${port}
                     else
                        echo "。。。。。。。。。"
                     fi
                    done
fi
 

  

 

  3. shutwon.sh

  通過模塊名字環境名字打包,獲取端口,通過調用停止遠程腳本(shutdown_script.sh)結束任務。

#!/usr/bin/env bash
cd ./ITS_$1
port=`cat ./src/main/resources/config/application-$2.properties | grep server.port | awk -F = {print $2}`
echo "-----------------當前項目端口號:${port}-----------------------"
 echo "----------------開始執行$2環境$1項目下線-------------------------"
cd ..
DEV_HOST=`cat ./host.properties | grep dev.host | awk -F = {print $2}`
UAT_HOST=`cat ./host.properties | grep uat.host | awk -F = {print $2}`
WWW_HOST=`cat ./host.properties | grep www.host | awk -F = {print $2}`
if [ "$2"=="dev" ]
then
    OLD_IFS="$IFS"
    IFS=","
    arr=($DEV_HOST)
    IFS="$OLD_IFS"
    for host in ${arr[@]}
    do
     echo "-----------當前運維的機器ip是:$host--------------------"
     echo "Please input y nor n. "
     read
     if [ "$REPLY" == "y" ]
     then
        ssh tomcat@$host -C "bash -s" < ./stop_script.sh ${port}
     else
        echo "。。。。。。。。。"
     fi
    done
fi
if [ "$2" == "www" ]
then
    OLD_IFS="$IFS"
        IFS=","
        arr=($WWW_HOST)
        IFS="$OLD_IFS"
        for host in ${arr[@]}
        do
         echo "-----------當前運維的機器ip是:$host--------------------"
         echo "Please input y nor n. "
         read
         if [ "$REPLY" == "y" ]
         then
            ssh tomcat@$host -C "bash -s" < ./stop_script.sh ${port}
         else
            echo "。。。。。。。。。"
         fi
        done
fi
if [ "$2" == "uat" ]
then
    OLD_IFS="$IFS"
            IFS=","
            arr=($UAT_HOST)
            IFS="$OLD_IFS"
            for host in ${arr[@]}
            do
             echo "-----------當前運維的機器ip是:$host--------------------"
             echo "Please input y or n "
             read
             if [ "$REPLY" == "y" ]
             then
                ssh tomcat@$host -C "bash -s" < ./stop_script.sh ${port}
             else
                echo "。。。。。。。。。"
             fi
            done
fi
 

  

 

  4.       clear.sh

  通過服務器列表調用清理腳本(clear_script.sh)清理任務

#!/bin/bash
DEV_HOST=`cat ./host.properties | grep dev.host | awk -F = {print $2}`
UAT_HOST=`cat ./host.properties | grep uat.host | awk -F = {print $2}`
WWW_HOST=`cat ./host.properties | grep www.host | awk -F = {print $2}`
HOST="$DEV_HOST,$UAT_HOST,$WWW_HOST"
     OLD_IFS="$IFS"
                     IFS=","
                     arr=($HOST)
                     IFS="$OLD_IFS"
                     a_len=${#arr[@]}
                    for((count=0;count<a_len;count++))
                     do
                       index=$a_len
                       for((i=0;i<count;i++))
                       do
                         if [ ${arr[i]} == ${arr[count]} ]
                         then
                           index=$i
                           break;
                         fi
                       done
                       if [ $index -ge $a_len ]
                       then
                         echo "-----------當前清理的機器ip是:$host--------------------"

                         ssh -C tomcat@${arr[count]} "bash -s" < ./clear_script.sh

                         echo "-----------當前清理任務完成----------------------------"
                       fi
                     done
 

  

 

  5. run_all.sh

  通過host配置文件獲取對應環境的host機器並調用run_uninstall.sh批量啟動。

#! /bin/bash
CONTEXT=context
CODE=core
SDK=sdk
for module in `sed -n s/.*>\(.*\)<\/module>/\1/p $1 pom.xml`
   do
    fstr=`echo $module | cut -d \_ -f 2`
    if [ "$fstr" == ${CONTEXT} ]
    then
      continue;
    elif [ "$fstr" == ${CODE} ]
    then
      continue;

    elif [ "$fstr" == ${SDK} ]
    then
      continue;
   else
     echo "開啟項目-------$fstr----------"
     sh run_uninstall.sh $fstr $1
   fi
   done
 

  

  6. shutdown_all.sh

  通過host配置文件獲取對應環境的host機器並調用shutdown.sh批量結束。

#! /bin/bash
CONTEXT=context
CODE=core
SDK=sdk
for module in `sed -n s/.*>\(.*\)<\/module>/\1/p $1 pom.xml`
   do
    fstr=`echo $module | cut -d \_ -f 2`
    if [ "$fstr" == ${CONTEXT} ]
    then
      continue;
    elif [ "$fstr" == ${CODE} ]
    then
      continue;

    elif [ "$fstr" == ${SDK} ]
    then
      continue;
   else
     sh shutdown.sh $fstr $1
   fi
   done

  

綜上:

以上所有腳本文件需要放在項目根目錄下執行。

總結:

優點:

可以通過簡單的命令就可以啟動,停止項目,使用方便。

不再需要登錄到服務器上部署。

通過簡單的說明,就可以使小夥伴們在自己機器實現部署。

缺點:

如果服務器實現環境隔離就無法通過ssh部署。

沒有權限控制,很容易搞亂環境。開放性太高。

在殺掉進程時候有時候發現一個端口對應多個進程,情況無法停止。

啟動時候可能只需要獲取啟動時候成功,不需要輸出日誌文件。

下篇將結合gitlab如何實現自動化部署,解決環境隔離問題

---恢復內容結束---

背景:

作為一個運維方面還算可以的小白,很自然部門中關於一些運維,部署,監控的任務就落到我身上。在被小夥伴們無數次的呼喚解決項目部署問題後,我忍無可忍,所以,我的目標是把他們交給我的部

署任務完美的退回去,即使他們對Linux一無所知。

解決的問題:

 頻繁的部署,重啟任務。

主要項目描述:

項目總有13個模塊,spring boot 項目,啟動模塊有10個。

前提:

  主管項目後臺模塊架構設計,參與大部分開發任務,使平臺提供運維支持成為可能。由於項目在 不斷擴展期間,所以,部署工作十分繁重,嚴重浪費了我的時間。

達到目標:

  1. 通過sh run.sh module env 啟動項目

  2. 通過 sh shutdown.sh module env 停掉項目

  3. 通過sh run_all.sh env 啟動所有項目

  4. 通過 sh shutdown_all.sh module env 停掉項目

  5. 通過 sh clear.sh 清理服務器上七天以前的日誌文件以及備份jar包

技術支持:

  scp 執行文件上傳

  ssh 遠程執行本地腳本文件

項目架構規範(針對運維部分)

  1. 項目提供dev,uat,www環境的文件配置

  2. spring boot 項目maven管理

  3. 配置文件必須在模塊目錄下conf中application-env.properties

  4. 啟動端口必須配置在配置文件中

  5. 模塊打包為 Project_module.jar

  6. 模塊名字規範: Project_module

遠程執行腳本

  1. run_script.sh(遠程啟動腳本)

    通過端口殺掉進程,通過模塊名啟動模塊。

#! /bin/bash
echo $1,$2,$3
cd ~/ITS_service/$2/
pwd
pid=`/usr/sbin/lsof -t -i:$3`
echo $pid
if [ $pid != "" ]
then
   kill -9 $pid
   sleep 3
   nohup java -jar ITS_$1.jar &
else
   echo "端口不存在。。。。。。。。"
   nohup java -jar ITS_$1.jar &
fi

  2. shutdown_script.sh(遠程停止腳本)

    通過端口殺掉進程。

#!/usr/bin/env bash
pid=`/usr/sbin/lsof -t -i:$1`
echo $pid
if [ $pid != "" ]
then
   exec kill -9 $pid
   echo "---------------進程已關閉----------------"
else
   echo "端口不存在。。。。。。。。"
fi

  

  3. clear_script.sh(遠程清理腳本)

    清理任務清理所有。

#!/bin/bash

      # 要清理的目錄,多個目錄用空格分開
      logs=(/home/tomcat/ITS_service/www/logs /home/tomcat/ITS_service/dev/logs /home/tomcat/ITS_service/uat/logs)

      # 循環 logs 數組
      for dir in ${logs[*]}
        do
          # 刪除目錄下 7 天之前的日誌文件
          find $dir -mtime +7 -name *.log* | xargs rm
        done

      # 要清理的目錄,多個目錄用空格分開
      jars=(/home/tomcat/ITS_service/www /home/tomcat/ITS_service/dev /home/tomcat/ITS_service/uat)

      # 循環 jars 數組
      for dir in ${jars[*]}
        do
          # 刪除目錄下 7 天之前的備份jar包
          find $dir -mtime +7 -name backup* | xargs rm -rf
        done

  

  4. backup_script.sh(備份jar包)

    通過 模塊環境,模塊名字備份jar。

#! /bin/bash
echo $1,$2
cd ~/ITS_service/$2/
pwd
t=`date "+%Y-%m-%d-%H"`
Ddate=`date "+%Y-%m-%d"`
folder=~/ITS_service/$2/backup_$Ddate/
echo "備份ITS_$1.jar.............."
if [ ! -d "$folder" ]; then
  mkdir -p "$folder"
fi
cp ITS_$1.jar $folder/ITS_$1_backup_$t.jar

  

本地執行腳本

  1. run.sh

  通過模塊名字環境名字打包,獲取端口,通過調用(backup_script.sh)備份jar包,通過上傳命令上傳jar,通過調用啟動遠程腳本(run_script.sh)啟動。

#!/usr/bin/env bash
#cd ./ITS_core
#mvn clean && mvn install -Dmaven.test.skip=true
#cd ..
#cd ./ITS_sdk
#mvn clean && mvn install -Dmaven.test.skip=true
#cd ..
#cd ./ITS_context
#mvn clean && mvn install -Dmaven.test.skip=true
#cd ..
cd ./ITS_$1
port=`cat ./src/main/resources/config/application-$2.properties | grep server.port | awk -F ‘=‘ ‘{print $2}‘`
echo "port:${port}"
mvn clean
mvn package -P$2 -Dmaven.test.skip=true
cd target
DEV=dev
WWW=www
UAT=uat
DEV_HOST=`cat ../../host.properties | grep dev.host | awk -F ‘=‘ ‘{print $2}‘`
UAT_HOST=`cat ../../host.properties | grep uat.host | awk -F ‘=‘ ‘{print $2}‘`
WWW_HOST=`cat ../../host.properties | grep www.host | awk -F ‘=‘ ‘{print $2}‘`
    echo "----------------開始執行$2環境$1項目的部署-------------------------"
if [ "$2" == ${DEV} ]
then
     OLD_IFS="$IFS"
                     IFS=","
                     arr=($DEV_HOST)
                     IFS="$OLD_IFS"
                     for host in ${arr[@]}
                     do
                      echo "-----------當前運維的機器ip是:$host--------------------"
                      echo "Please input y or n "
                      read
                      if [ "$REPLY" == "y" ]
                      then
                        ssh -C tomcat@$host "bash -s" < ../../backup_script.sh $1 $2
                        scp ITS_$1.jar tomcat@$host:/home/tomcat/ITS_service/$2/ITS_$1.jar
                        ssh -C tomcat@$host "bash -s" < ../../run_script.sh $1 $2 ${port}
                      else
                         echo "。。。。。。。。。"
                      fi
                     done
fi
if [ "$2" == ${WWW} ]
then
      OLD_IFS="$IFS"
                           IFS=","
                           arr=($WWW_HOST)
                           IFS="$OLD_IFS"
                           for host in ${arr[@]}
                           do
                            echo "-----------當前運維的機器ip是:$host--------------------"
                            echo "Please input y or n "
                            read
                            if [ "$REPLY" == "y" ]
                            then
                              ssh -C tomcat@$host "bash -s" < ../../backup_script.sh $1 $2
                              scp ITS_$1.jar tomcat@$host:/home/tomcat/ITS_service/$2/ITS_$1.jar
                              ssh -C tomcat@$host "bash -s" < ../../run_script.sh $1 $2 ${port}
                            else
                               echo "。。。。。。。。。"
                            fi
                           done
fi
if [ "$2" == ${UAT} ]
then
      OLD_IFS="$IFS"
                           IFS=","
                           arr=($UAT_HOST)
                           IFS="$OLD_IFS"
                           for host in ${arr[@]}
                           do
                            echo "-------------------當前運維的機器ip是:$host--------------------"
                            echo "Please input y or n "
                            read
                            if [ "$REPLY" == "y" ]
                            then
                              ssh -C tomcat@$host "bash -s" < ../../backup_script.sh $1 $2
                              scp ITS_$1.jar tomcat@$host:/home/tomcat/ITS_service/$2/ITS_$1.jar
                              ssh -C tomcat@$host "bash -s" < ../../run_script.sh $1 $2 ${port}
                            else
                               echo "。。。。。。。。。"
                            fi
                           done
fi

  

  2. run_uninstall.sh

  和上面不通是只進行啟動不上傳。

#!/usr/bin/env bash
cd ./ITS_$1
port=`cat ./src/main/resources/config/application-$2.properties | grep server.port | awk -F ‘=‘ ‘{print $2}‘`
echo "port:${port}"
DEV=dev
WWW=www
UAT=uat
echo "-------------------------開始執行$2環境$1項目的部署-------------------------"
cd ..
DEV_HOST=`cat ./host.properties | grep dev.host | awk -F ‘=‘ ‘{print $2}‘`
UAT_HOST=`cat ./host.properties | grep uat.host | awk -F ‘=‘ ‘{print $2}‘`
WWW_HOST=`cat ./host.properties | grep www.host | awk -F ‘=‘ ‘{print $2}‘`
if [ "$2" == ${DEV} ]
then
    OLD_IFS="$IFS"
                IFS=","
                arr=($DEV_HOST)
                IFS="$OLD_IFS"
                for host in ${arr[@]}
                do
                 echo "-----------當前運維的機器ip是:$host--------------------"
                 echo "Please input y or n "
                 read
                 if [ "$REPLY" == "y" ]
                 then
                   ssh -C tomcat@$host "bash -s" < ./run_script.sh $1 $2 ${port}
                 else
                    echo "。。。。。。。。。"
                 fi
                done
fi
if [ "$2" == ${WWW} ]
then
    OLD_IFS="$IFS"
                    IFS=","
                    arr=($WWW_HOST)
                    IFS="$OLD_IFS"
                    for host in ${arr[@]}
                    do
                     echo "-----------當前運維的機器ip是:$host--------------------"
                     echo "Please input y or n "
                     read
                     if [ "$REPLY" == "y" ]
                     then
                       ssh -C tomcat@$host "bash -s" < ./run_script.sh $1 $2 ${port}
                     else
                        echo "。。。。。。。。。"
                     fi
                    done
fi
if [ "$2" == ${UAT} ]
then
    OLD_IFS="$IFS"
                    IFS=","
                    arr=($UAT_HOST)
                    IFS="$OLD_IFS"
                    for host in ${arr[@]}
                    do
                     echo "-----------當前運維的機器ip是:$host--------------------"
                     echo "Please input y or n "
                     read
                     if [ "$REPLY" == "y" ]
                     then
                       ssh -C tomcat@$host "bash -s" < ./run_script.sh $1 $2 ${port}
                     else
                        echo "。。。。。。。。。"
                     fi
                    done
fi

  

  3. shutwon.sh

  通過模塊名字環境名字打包,獲取端口,通過調用停止遠程腳本(shutdown_script.sh)結束任務。

#!/usr/bin/env bash
cd ./ITS_$1
port=`cat ./src/main/resources/config/application-$2.properties | grep server.port | awk -F ‘=‘ ‘{print $2}‘`
echo "-----------------當前項目端口號:${port}-----------------------"
 echo "----------------開始執行$2環境$1項目下線-------------------------"
cd ..
DEV_HOST=`cat ./host.properties | grep dev.host | awk -F ‘=‘ ‘{print $2}‘`
UAT_HOST=`cat ./host.properties | grep uat.host | awk -F ‘=‘ ‘{print $2}‘`
WWW_HOST=`cat ./host.properties | grep www.host | awk -F ‘=‘ ‘{print $2}‘`
if [ "$2"=="dev" ]
then
    OLD_IFS="$IFS"
    IFS=","
    arr=($DEV_HOST)
    IFS="$OLD_IFS"
    for host in ${arr[@]}
    do
     echo "-----------當前運維的機器ip是:$host--------------------"
     echo "Please input y nor n. "
     read
     if [ "$REPLY" == "y" ]
     then
        ssh tomcat@$host -C "bash -s" < ./stop_script.sh ${port}
     else
        echo "。。。。。。。。。"
     fi
    done
fi
if [ "$2" == "www" ]
then
    OLD_IFS="$IFS"
        IFS=","
        arr=($WWW_HOST)
        IFS="$OLD_IFS"
        for host in ${arr[@]}
        do
         echo "-----------當前運維的機器ip是:$host--------------------"
         echo "Please input y nor n. "
         read
         if [ "$REPLY" == "y" ]
         then
            ssh tomcat@$host -C "bash -s" < ./stop_script.sh ${port}
         else
            echo "。。。。。。。。。"
         fi
        done
fi
if [ "$2" == "uat" ]
then
    OLD_IFS="$IFS"
            IFS=","
            arr=($UAT_HOST)
            IFS="$OLD_IFS"
            for host in ${arr[@]}
            do
             echo "-----------當前運維的機器ip是:$host--------------------"
             echo "Please input y or n "
             read
             if [ "$REPLY" == "y" ]
             then
                ssh tomcat@$host -C "bash -s" < ./stop_script.sh ${port}
             else
                echo "。。。。。。。。。"
             fi
            done
fi

  

  4. clear.sh

  通過服務器列表調用清理腳本(clear_script.sh)清理任務

#!/bin/bash
DEV_HOST=`cat ./host.properties | grep dev.host | awk -F ‘=‘ ‘{print $2}‘`
UAT_HOST=`cat ./host.properties | grep uat.host | awk -F ‘=‘ ‘{print $2}‘`
WWW_HOST=`cat ./host.properties | grep www.host | awk -F ‘=‘ ‘{print $2}‘`
HOST="$DEV_HOST,$UAT_HOST,$WWW_HOST"
     OLD_IFS="$IFS"
                     IFS=","
                     arr=($HOST)
                     IFS="$OLD_IFS"
                     a_len=${#arr[@]}
                    for((count=0;count<a_len;count++))
                     do
                       index=$a_len
                       for((i=0;i<count;i++))
                       do
                         if [ ${arr[i]} == ${arr[count]} ]
                         then
                           index=$i
                           break;
                         fi
                       done
                       if [ $index -ge $a_len ]
                       then
                         echo "-----------當前清理的機器ip是:$host--------------------"

                         ssh -C tomcat@${arr[count]} "bash -s" < ./clear_script.sh

                         echo "-----------當前清理任務完成----------------------------"
                       fi
                     done

  

  5. run_all.sh

  通過host配置文件獲取對應環境的host機器並調用run_uninstall.sh批量啟動。

#! /bin/bash
CONTEXT=context
CODE=core
SDK=sdk
for module in `sed -n ‘s/.*>\(.*\)<\/module>/\1/p‘ $1 pom.xml`
   do
    fstr=`echo $module | cut -d \_ -f 2`
    if [ "$fstr" == ${CONTEXT} ]
    then
      continue;
    elif [ "$fstr" == ${CODE} ]
    then
      continue;

    elif [ "$fstr" == ${SDK} ]
    then
      continue;
   else
     echo "開啟項目-------$fstr----------"
     sh run_uninstall.sh $fstr $1
   fi
   done

  

  6. shutdown_all.sh

  通過host配置文件獲取對應環境的host機器並調用shutdown.sh批量結束。

#! /bin/bash
CONTEXT=context
CODE=core
SDK=sdk
for module in `sed -n ‘s/.*>\(.*\)<\/module>/\1/p‘ $1 pom.xml`
   do
    fstr=`echo $module | cut -d \_ -f 2`
    if [ "$fstr" == ${CONTEXT} ]
    then
      continue;
    elif [ "$fstr" == ${CODE} ]
    then
      continue;

    elif [ "$fstr" == ${SDK} ]
    then
      continue;
   else
     sh shutdown.sh $fstr $1
   fi
   done

  

綜上:

以上所有腳本文件需要放在項目根目錄下執行。

總結:

優點:

可以通過簡單的命令就可以啟動,停止項目,使用方便。

不再需要登錄到服務器上部署。

通過簡單的說明,就可以使小夥伴們在自己機器實現部署。

缺點:

如果服務器實現環境隔離就無法通過ssh部署。

沒有權限控制,很容易搞亂環境。開放性太高。

在殺掉進程時候有時候發現一個端口對應多個進程,情況無法停止。

啟動時候可能只需要獲取啟動時候成功,不需要輸出日誌文件。

下篇將結合gitlab如何實現自動化部署,解決環境隔離問題

自動化部署