TLDR;
在遠程主機中運行命令的 shell 語法:前端$: ssh user@host "commands"
最近的一個項目中,咱們前端須要本身發佈靜態資源到遠程目標服務器上,中間須要通過一個跳板機(爲何不用公司內部的 GitLab 方式發佈,緣由不少,這裏就不表述了)。前端若是手動發佈的話須要通過如下步驟:shell
把全部靜態資源壓縮成一個 tgz 包bash
把壓縮包 scp 到跳板機服務器
ssh 到跳板機網絡
把壓縮包從跳板機 scp 到靜態資源的目標主機ssh
ssh 到目標主機函數
解壓縮壓縮包到指定目錄ui
執行 py 腳本,發佈到 cdncode
從上面的步驟能夠看出若是手動發佈一個服務器,大概須要通過7個步驟,每次發佈都須要至少 4-5 分鐘時間等待(咱們有 12 臺須要發佈的機器,每次發佈都須要 4(從第 3 步開始重複 12 次) * 12 分鐘),並且若是網絡不太好的話,等待的時間就更長了;更不要說手動發佈的時候會常常忘了步驟且更容易出錯了,每次發佈都好像回到了原始時代。cdn
萬幸的是 ssh 自己支持在遠程主機中運行命令的,語法就是
$: ssh user@host "command1; command2; command3; ...."
此處的 command 應該用 ""
包起來,避免 ;
被本地主機當作定界符處理。 ok,知道 ssh 的用法,咱們寫個 bash 處理一下上面 7 個步驟:
# 打壓縮包並上傳到跳板機的指定目錄 function compress() { tar -zcvf sc.tgz -C build . && scp -r sc.tgz root@xxx.xxx.xxx.xxx:~/oss_download/demo/ } # 經過 ssh 登陸跳板機執行 3 - 7 步 # 注意在跳板機跳登陸到目標服務器的時候須要 ssh -tt ,能夠在遠程機器上 ssh 到其餘的遠程主機並執行。詳細的解釋經過 man ssh 查看 # mkidr -p 是若是目標機器不存在這個目錄,就先建立這個目錄,保證 cd 或者 tar 的時候不會由於目標目錄不存在而引發報錯 function send() { ssh root@xxx.xxx.xxx.xxx "scp -r oss_download/demo/sc.tgz alibaba@${1}:~/ossdowload/data/demo/ ; ssh -tt alibaba@${1} 'mkdir -p ossdowload; cd ossdowload; mkdir -p data/demo/sc/${version}; tar -zvxf data/demo/sc.tgz -C data/demo/sc/${version} && rm -rf data/demo/sc.tgz && ./ceph_tmp.py'" } # 執行 compress 和 send 函數 function deploy() { compress send ${1} } # 發送到目標服務器 deploy yyy.yyy.yyy.yy
這是發佈到一個遠程主機的命令的腳本,是否是很簡單?以後若是想發佈到多個遠程主機,只要經過簡單的 while 語句就能夠搞定;到這裏就算結束了,大多數時候前端只須要掌握簡單的 bash 語法,就能夠經過自動化腳本節省了大量的時間去泡妹子,好開心。