Configure manual approval
在一般情況下,正式環境的佈署通常不會是全自動的
通常是人為決定何時佈署,並在人員監視下進行
所以上面流程需要有一個手動的部分
安排在staging的performance測試OK之後
只要加入以下設定:
when: manual設定
- Job不會自己執行,而是會等待人啟動執行
- 非常普遍的PROD佈署策略!
Workaround for GitLab Bug
前篇最後有發現在使用繼承的佈署方式後
繼承的佈署Job會拿不到SSH的KEY:
這個是前面設定在GitLab Server上的變數檔案:
簡單解說就是當用檔案式的變數來設定另一個變數:
在用繼承的時候會變成檔案變數的內容給了上圖左邊的變數
而不是檔案路徑(但是記得ssh指令的-i給定指定SSH的KEY是用檔案路徑)
所以上面chmod 400 後面可能是一堆加密key內容,而不是檔案絕對路徑
所以為了繞過這個BUG,要額外多出一些加工
首先先調整一下變數命名SSH_PRIVATE_KEY都改成SSH_KEY
然後利用Shell指令處理這段問題:
這時候還需要一些額外加工
因為ssh/scp在這情況下使用"-i"這個option指定KEY檔
仍然需要保持key檔的格式,會有很多的換行
但實際目前處理下以下講師的畫面:
需要調整回以下格式:
所以剛剛.deploy的這一段:
echo $SSH_KEY > deploy-key.pem#需要調整為頭尾換行外,中間每64個字元要自動加入換行符號
echo $SSH_KEY |sed -e "s/-----BEGIN RSA PRIVATE KEY-----/&\n/" -e "s/-----END RSA PRIVATE KEY-----/\n&/" -e "s/\S\{64\}/&\n/g"\ > deploy-key.pem#當遇到開頭或是結尾的指定字串時,加入換行
#最後才是其他每64個字元後額外串接換行
#sed的相關語法參考(LINK)
變成超長:
最後執行看看:
停在dev的佈署
如上小圖中我事後把dev的手動關掉
重跑後:
可以簡單地看看前面Job跑的結果報告等等或是直接看看網頁:
確認沒問題後直接點:
因為我們只有一個Job,點哪個都一樣
按下去後開始執行:
最後成功後記得防火牆也調整一下就可以瀏覽到5000 PORT的結果:
此時完整的pipeline如下: