摘要:在遠(yuǎn)程主機(jī)中運(yùn)行命令的語(yǔ)法最近的一個(gè)項(xiàng)目中,我們前端需要自己發(fā)布靜態(tài)資源到遠(yuǎn)程目標(biāo)服務(wù)器上,中間需要經(jīng)過(guò)一個(gè)跳板機(jī)為什么不用公司內(nèi)部的方式發(fā)布,原因很多,這里就不表述了。
TLDR;
在遠(yuǎn)程主機(jī)中運(yùn)行命令的 shell 語(yǔ)法:$: ssh user@host "commands"
最近的一個(gè)項(xiàng)目中,我們前端需要自己發(fā)布靜態(tài)資源到遠(yuǎn)程目標(biāo)服務(wù)器上,中間需要經(jīng)過(guò)一個(gè)跳板機(jī)(為什么不用公司內(nèi)部的 GitLab 方式發(fā)布,原因很多,這里就不表述了)。前端如果手動(dòng)發(fā)布的話需要經(jīng)過(guò)以下步驟:
把所有靜態(tài)資源壓縮成一個(gè) tgz 包
把壓縮包 scp 到跳板機(jī)
ssh 到跳板機(jī)
把壓縮包從跳板機(jī) scp 到靜態(tài)資源的目標(biāo)主機(jī)
ssh 到目標(biāo)主機(jī)
解壓縮壓縮包到指定目錄
執(zhí)行 py 腳本,發(fā)布到 cdn
從上面的步驟可以看出如果手動(dòng)發(fā)布一個(gè)服務(wù)器,大概需要經(jīng)過(guò)7個(gè)步驟,每次發(fā)布都需要至少 4-5 分鐘時(shí)間等待(我們有 12 臺(tái)需要發(fā)布的機(jī)器,每次發(fā)布都需要 4(從第 3 步開(kāi)始重復(fù) 12 次) * 12 分鐘),而且如果網(wǎng)絡(luò)不太好的話,等待的時(shí)間就更長(zhǎng)了;更不要說(shuō)手動(dòng)發(fā)布的時(shí)候會(huì)經(jīng)常忘了步驟且更容易出錯(cuò)了,每次發(fā)布都好像回到了原始時(shí)代。
萬(wàn)幸的是 ssh 本身支持在遠(yuǎn)程主機(jī)中運(yùn)行命令的,語(yǔ)法就是
$: ssh user@host "command1; command2; command3; ...."
此處的 command 應(yīng)該用 "" 包起來(lái),避免 ; 被本地主機(jī)當(dāng)做定界符處理。 ok,知道 ssh 的用法,我們寫(xiě)個(gè) bash 處理一下上面 7 個(gè)步驟:
# 打壓縮包并上傳到跳板機(jī)的指定目錄 function compress() { tar -zcvf sc.tgz -C build . && scp -r sc.tgz root@xxx.xxx.xxx.xxx:~/oss_download/demo/ } # 通過(guò) ssh 登錄跳板機(jī)執(zhí)行 3 - 7 步 # 注意在跳板機(jī)跳登錄到目標(biāo)服務(wù)器的時(shí)候需要 ssh -tt ,可以在遠(yuǎn)程機(jī)器上 ssh 到其他的遠(yuǎn)程主機(jī)并執(zhí)行。詳細(xì)的解釋通過(guò) man ssh 查看 # mkidr -p 是如果目標(biāo)機(jī)器不存在這個(gè)目錄,就先創(chuàng)建這個(gè)目錄,保證 cd 或者 tar 的時(shí)候不會(huì)因?yàn)槟繕?biāo)目錄不存在而引起報(bào)錯(cuò) 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"" } # 執(zhí)行 compress 和 send 函數(shù) function deploy() { compress send ${1} } # 發(fā)送到目標(biāo)服務(wù)器 deploy yyy.yyy.yyy.yy
這是發(fā)布到一個(gè)遠(yuǎn)程主機(jī)的命令的腳本,是不是很簡(jiǎn)單?之后如果想發(fā)布到多個(gè)遠(yuǎn)程主機(jī),只要通過(guò)簡(jiǎn)單的 while 語(yǔ)句就可以搞定;到這里就算結(jié)束了,大多數(shù)時(shí)候前端只需要掌握簡(jiǎn)單的 bash 語(yǔ)法,就可以通過(guò)自動(dòng)化腳本節(jié)省了大量的時(shí)間去泡妹子,好開(kāi)心。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/80532.html
摘要:環(huán)境介紹角色系統(tǒng)版本版本準(zhǔn)備工作在被遠(yuǎn)程主機(jī)上準(zhǔn)備好腳本文件。禁止在目標(biāo)機(jī)上執(zhí)行命令,勾選后將會(huì)忽略在配置中選項(xiàng)中設(shè)置的命令。服務(wù)使用的用戶名,使用進(jìn)行連接時(shí)為指定的用戶名。在這里填寫(xiě)在遠(yuǎn)程主機(jī)上執(zhí)行的命令。 ...
摘要:數(shù)人云今天帶來(lái)的文章將分享如何用實(shí)現(xiàn)命令行程序的過(guò)程中整體思路以及需要注意哪些問(wèn)題。月日,超越傳統(tǒng)運(yùn)維之道的話題將在北京延續(xù),四位業(yè)界大牛技術(shù)齊聚,結(jié)合傳統(tǒng)運(yùn)維現(xiàn)狀及實(shí)踐案例,講述的超越之道。 數(shù)人云今天帶來(lái)的文章將分享如何用Docker實(shí)現(xiàn)PHP命令行程序的CI/CD過(guò)程中整體思路以及需要注意哪些問(wèn)題。 6月10日,《DevOps&SRE超越傳統(tǒng)運(yùn)維之道》的話題將在北京延續(xù),四位業(yè)界...
摘要:數(shù)人云今天帶來(lái)的文章將分享如何用實(shí)現(xiàn)命令行程序的過(guò)程中整體思路以及需要注意哪些問(wèn)題。月日,超越傳統(tǒng)運(yùn)維之道的話題將在北京延續(xù),四位業(yè)界大牛技術(shù)齊聚,結(jié)合傳統(tǒng)運(yùn)維現(xiàn)狀及實(shí)踐案例,講述的超越之道。 數(shù)人云今天帶來(lái)的文章將分享如何用Docker實(shí)現(xiàn)PHP命令行程序的CI/CD過(guò)程中整體思路以及需要注意哪些問(wèn)題。 6月10日,《DevOps&SRE超越傳統(tǒng)運(yùn)維之道》的話題將在北京延續(xù),四位業(yè)界...
閱讀 3680·2021-11-23 09:51
閱讀 1044·2021-11-19 11:30
閱讀 3369·2019-08-29 14:16
閱讀 3375·2019-08-29 12:12
閱讀 2373·2019-08-26 13:40
閱讀 3482·2019-08-26 12:21
閱讀 3079·2019-08-26 11:55
閱讀 2229·2019-08-26 11:35