2016-02-17 37 views
4

我有一個AWS有兩個實例。我已經配置了CodeDeploy在所有實例上自動部署我的項目。如何使AWS CodeDeploy在某些appspec掛鉤失敗時返回錯誤?

appspec.yml我有段:

hooks: 
    AfterInstall: 
    - location: codedeploy_scripts/deploy_afterinstall 
     timeout: 300 
     runas: root 

deploy_afterinstall是一個簡單的bash腳本。有時候有些命令會失敗。例如這個命令更新/安裝作曲家依賴關係。

if [ -f "composer.lock" ]; then 
    composer update -n 
else 
    composer install -n 
fi 

但CodeDeploy忽略此腳本中的任何錯誤,並始終表示部署成功。我怎樣才能改變這種行爲?如果鉤子中的某些命令尚未成功完成,並且需要查看部署控制檯或日誌中的錯誤,我希望部署失敗。

回答

2

CodeDeploy代理依賴腳本'deploy_afterinstall'的退出狀態來確定部署生命週期事件是成功還是失敗。您可能想要查看是否可以捕獲在腳本中運行的命令的退出狀態,並從「deploy_afterinstall」中將其返回。腳本中的任何非零返回值都會導致部署生命週期事件失敗。

6

我最初遇到了CodeDeploy類似的問題。我建議讓您的bash腳本更嚴格:

#!/bin/bash 
set -euo pipefail 

通過設置E,U,和鄰pipefail作爲選項bash將更像一種編程語言,而不是像一個腳本。您可以閱讀有關"Bash Strict Mode" here的更多信息。

當您的作曲家安裝或更新失敗時,Bash將以非零代碼退出,代碼部署將失敗。

+0

謝謝Cory。我一定會嘗試你的解決方案 – Stalinko

相關問題