在最近的工作中,我們已經使用阿里雲nas將需要發布的jar包統一上傳到nas中,但是部署的時候還是需要每個伺服器去單獨啟動,比較麻煩。所以準備寫乙個批量自動部署的指令碼。
1.我們使用的spring cloud微服務
2.現在服務的部署方式是單獨n臺伺服器部署eureka+nginx+nacos(每台機器配置和服務相同)。單獨的m臺部署gateway、user等業務服務(每台機器配置和服務相同)。
3.沒乙個業務服務單獨在基礎資料夾下新建資料夾,且包含三個檔案,乙個jar包,對應的dockerfile,啟動的start_***.sh
1.必須要有基礎資料夾路徑
2.必須要有m臺業務伺服器的ssh資訊
3.必須要知道所有業務服務的啟動sh(啟動時)、docker容器名稱(重啟時)
4.有這這些資訊之後,我們可以ssh到對應伺服器執行啟動/重啟指令
1.使用jq解析json格式的配置檔案(為什麼不用yml),安裝jq
2.使用sshpass連線伺服器(是不是可以用其它免密登入代替),安裝sshpass
#/bin/bash
## get param from commond
declare -a params
index=0
for i in "$@"; do
params[$index]=$i
let "index++"
done
startmark="s"
# echo "接收到的指令為 $"
start=0
if [ "$" = "$startmark" ]
then let "start=1"
fi## read from config
basepath=$(jq .basepath test.json)
declare -a bizcommond;
declare -a bizvalid;
contain=0
bizindex=0
while read name path containername port servername; do
contain=$(echo "$" | grep -wq "$name" && echo 1 || echo 0)
# echo "compare result is $contain"
if (($contain == 1))
then
if (($start == 1))
then
bizcommond[$bizindex]=$path
else
bizcommond[$bizindex]=$containername
fibizvalid[$bizindex]=":$port/$servername/actuator/info"
let "bizindex++"
fidone < <(cat test.json | jq -r '.biz|"\(.name) \(.path) \(.containername) \(.port) \(.servername)"')
if (( $ < 1))
then exit
fiwhile read ip port user pass ; do
echo "連線到$ip部署"
for ((i=0; i<$; i++))
doecho "開始啟動"
if (($start == 1))
then
commond=" cd $basepath && $ "
else
commond="docker restart $ "
fiecho "執行啟動指令 $commond"
echo "執行檢查指令 $validcommond"
result=$($validcommond)
echo "檢查結果為:$result"
while [[ "$result" == "000" ]]; do
sleep 3
result=$($validcommond)
echo "檢查結果為:$result"
done
echo "啟動完成"
sleep 2
done
done < <(cat test.json | jq -r '.machine|"\(.ip) \(.port) \(.user) \(.pass)"')
,
],"machine":[]
}
json資料釋義
],"machine": // 部署的伺服器[]
}
## 啟動
./***.sh s yyy zzz
## 重啟
./***.sh r yyy zzz
1.結合eureka,先將eureka的狀態變為down之後在執行啟動/重啟
2.校驗服務是否啟動還需要校驗eureka的狀態是否是up(eureka的介面是xml的o(╥﹏╥)o)
3.需要在啟動服務時傳入引數/環境變數還未做
curl 取得http返回的狀態碼
shell 陣列
shell指令碼自動部署jar包
bin bash 上面中的 是一種約定標記,它可以告訴系統這個指令碼需要什麼樣的直譯器來執行 使用說明,用來提示輸入引數 usage 檢查程式是否在執行 is exist 如果不存在返回1,存在返回0 if z pid then return 1else return 0fi 啟動方法 start ...
shell指令碼 自動化部署lnmp
root localhost shell vim lnmp.sh bin bash yum y install httpd 安裝http yum y install mariadb mariadb devel mariadb server 安裝資料庫 yum y install php php my...
shell指令碼 php論壇自動安裝部署
要求 編寫指令碼 執行指令碼lamp.sh 指令碼執行後部署好論壇,並設定apache的網路介面為8080 實驗 vim lamp.sh sed listen 80 clisten 8080 i etc httpd conf httpd.conf 修改httpd服務埠 sed datadir i s...