基於Shell的自動部署指令碼

2021-10-08 21:02:34 字數 2756 閱讀 8555

在最近的工作中,我們已經使用阿里雲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...