当某些appspec挂钩失败时,如何使AWS CodeDeploy返回错误?

Sta*_*nko 6 amazon-web-services aws-code-deploy

我有一个有两个实例的AWS.我已配置CodeDeploy以在所有实例上自动部署我的项目.

appspec.yml我有那个部分:

hooks:
   AfterInstall:
     - location: codedeploy_scripts/deploy_afterinstall
       timeout: 300
       runas: root
Run Code Online (Sandbox Code Playgroud)

deploy_afterinstall是一个简单的bash脚本.有时其中的一些命令会失败.例如,此命令更新/安装composer依赖项.

if [ -f "composer.lock" ]; then
   composer update -n
else
   composer install -n
fi
Run Code Online (Sandbox Code Playgroud)

但CodeDeploy忽略了此脚本中的任何错误,并始终表示部署成功.我该如何改变这种行为?当挂钩中的某些命令未成功完成并且在部署控制台或日志中查看错误时,我希望部署失败.

小智 10

我最初遇到了与CodeDeploy类似的问题.我建议你的bash脚本更严格:

#!/bin/bash
set -euo pipefail
Run Code Online (Sandbox Code Playgroud)

通过将e,u和o pipefail设置为选项,Bash将更像是一种编程语言,而不像脚本.您可以在此处阅读有关"Bash严格模式"的更多信息.

当您的编写器安装或更新失败时,Bash将以非零代码退出,代码部署将失败.


小智 3

CodeDeploy 代理依赖脚本“deploy_afterinstall”的退出状态来确定部署生命周期事件是成功还是失败。您可能想看看是否可以捕获在脚本中运行的命令的退出状态并从“deploy_afterinstall”返回它。脚本中的任何非零返回值都将使部署生命周期事件失败。