【问题标题】:How to make AWS CodeDeploy return an error when some of appspec hooks fails?当某些 appspec 挂钩失败时,如何使 AWS CodeDeploy 返回错误?
【发布时间】:2026-02-05 04:35:01
【问题描述】:

我有一个带有两个实例的 AWS。我已将 CodeDeploy 配置为在所有实例上自动部署我的项目。

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 会忽略此脚本中的任何错误,并始终说部署成功。我怎样才能改变这种行为?我希望在钩子中的某些命令未成功完成时部署失败,并在部署控制台或日志中查看错误。

【问题讨论】:

    标签: amazon-web-services aws-code-deploy


    【解决方案1】:

    我最初在使用 CodeDeploy 时遇到了类似的问题。我建议让你的 bash 脚本更加严格:

    #!/bin/bash
    set -euo pipefail
    

    通过将 e、u 和 o pipefail 设置为选项,Bash 的行为将更像一种编程语言而不是脚本。你可以阅读更多关于"Bash Strict Mode" here的信息。

    当您的 composer 安装或更新失败时,Bash 将退出并显示非零代码,代码部署将失败。

    【讨论】:

    • 谢谢科里。我肯定需要尝试您的解决方案
    【解决方案2】:

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

    【讨论】:

      最近更新 更多