自動化部署
---恢復內容開始---
背景:
作為一個運維方面還算可以的小白,很自然部門中關於一些運維,部署,監控的任務就落到我身上。在被小夥伴們無數次的呼喚解決項目部署問題後,我忍無可忍,所以,我的目標是把他們交給我的部
署任務完美的退回去,即使他們對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如何實現自動化部署,解決環境隔離問題
自動化部署