1. 程式人生 > 實用技巧 >部署-shell指令碼實現遠端部署

部署-shell指令碼實現遠端部署

什麼是shell指令碼?

首先我們要了解一下shell的概念。shell 是指一種應用程式,這個應用程式提供了一個介面,使用者通過這個介面訪問作業系統核心的服務。而shell指令碼則是shell程式可以解釋和執行的指令。

實現遠端釋出

前景介紹

博主所在公司的專案開發流程當中,前後端專案都是交於後端同學來打包部署。由於沒有使運維,也沒使用jenkins來實現專案的自動釋出。導致在前後端聯調發布新版本的時候,每次都需要後端同學手動來實現專案的部署,非常費時費力。出於折衷的目的,博主先推動了shell指令碼來實現自動釋出。

rsa公鑰登入配置

rsa公鑰的配置,博主在之前的部落格已經講解過了。看過的小夥伴可以接著往下閱讀。

指令碼實現要素

這裡我們先思考一下,實現shell指令碼的遠端釋出需要實現哪些步驟?

1.拷貝壓縮檔案到遠端伺服器臨時目錄。
2.在臨時目錄將壓縮檔案進行解壓。
3.關閉專案對應的程序。
4.將專案原檔案進行剪下到備份目錄。
5.將臨時目錄的專案檔案拷貝到工作目錄。
6.重啟開啟程序。

指令碼編寫

測試環境下,對於java後端的springboot專案,博主的實際使用指令碼如下。

#引用字元超過倆次,需要抽取成變數。
#伺服器使用者和ip地址
[email protected]

#專案名稱
projectname=OurwayLgVopak

#app名稱
appname=userweb-0.0.1-SNAPSHOT.jar

#上傳jar包到伺服器路徑
scp ./userweb/target/bin/${appname} ${server}:/project/${projectname}/

#ssh遠端連線之後需要執行的多條指令碼,採用了分隔符的方式,這裡以單引號分割
ssh ${server} '
cd /project
projectname=OurwayLgVopak
appname=userweb-0.0.1-SNAPSHOT.jar

#先獲取到執行專案的程序編號
pid=$(ps -ef|grep ${projectname}/src/${appname}|grep -v grep|awk "{print \$2}")
if [ ! "${pid}" ];then
echo "沒有找到${appname}的程序,無需kill"
else
echo "找到${appname}的程序${pid}"
echo "kill ${pid}"
kill ${pid}
fi

#覆蓋移動jar包
mv -f ${projectname}/${appname} ${projectname}/src/${appname}

#nohup方式啟動java應用
nohup java -jar ${projectname}/src/${appname} >> ${projectname}/src/nohup.out &

#獲取到專案執行的pid,排除執行命令的程序,排除被殺死的原型程序
#awk命令,預設使用空格分隔,並得到第二個引數的值
newpid=$(ps -ef|grep ${projectname}/src/${appname}|grep -v grep|grep -v ${pid}|awk "{print \$2}")
echo "${appname}啟動完畢,程序${newpid}"
#退出遠端連線
exit
'
echo '指令碼執行完成'

博主微信公眾號