部署-shell指令碼實現遠端部署
阿新 • • 發佈:2020-08-15
什麼是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 '指令碼執行完成'