Site icon Mr. 沙先生

AWS CodeDeploy 會使用舊的 appspec.yml 進行 deploy 的問題

今天同時遇到兩個同事在使用 CodeDeploy 的時候處理 appspec.yml 中 ApplicationStop 這個 hooks 都會去抓到舊的 appspec.yml 設定 … 導致一直無法 fix 在 ApplicationStop 的錯誤

 

先排除幾個問題

 

從這兩個狀況來看 Travis CI 打 code 到 S3 是沒問題的 …

 

AWS 有個好查問題的去處:AWS forums 裡面有一篇提到「ApplicationStop hook not executed for first deployment

 

先複習一下 CodeDeploy hooks 的流程

 

原因是 CodeDeploy 在做 CD 的時候,ApplicationStop 在 DownloadBundle 之前就已經執行,所以跑 ApplicationStop 的時候還沒有從 S3 下載新的 appspec.yml,所以自然會去執行上一次的 appspec.yml (ApplicationStop)

 

同理,如果你之前的 appspec.yml 沒有寫 ApplicationStop 的 hooks 的話,在第一次也不會執行 ApplicationStop。

 

這樣的設計其實仔細思考並不是沒有道理,因為當你第一次 deploy 的時候理論上並沒有 application (如 npm start)

 

如果你遇到了這個問題,要排除只能進到 OS 裡面去 fix 上一版的 appspec.yml

/opt/codedeploy-agent/deployment-root/**/${deployment_id}/deployment-archive/appspec.yml

 

或是砍掉之前的 deployment

$ rm -rf /opt/codedeploy-agent/deployment-root/*

 

 

Exit mobile version