8

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

4

2 回答 2

12

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

#!/bin/bash
set -euo pipefail

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

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

于 2016-04-27T17:54:37.490 回答
3

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

于 2016-02-23T20:15:21.387 回答