我有一个包含两个实例的 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 忽略此脚本中的任何错误,并始终说部署成功。如何更改此行为?我希望在挂钩中的某些命令未成功完成时部署失败,并在部署控制台或日志中查看错误。
我最初在 CodeDeploy 中遇到了类似的问题。我建议让你的 bash 脚本更严格:
#!/bin/bash
set -euo pipefail
通过将 e、u 和 o pipefail 设置为选项,Bash 的行为将更像编程语言,而不像脚本。您可以在此处阅读有关"Bash Strict Mode"的更多信息。
当您的作曲家安装或更新失败时,Bash 将以非零代码退出,并且代码部署将失败。
CodeDeploy 代理依赖于脚本"deploy_afterinstall"的退出状态来确定部署生命周期事件是成功还是失败。您可能希望查看是否可以捕获在脚本中运行的命令的退出状态,并将其从"deploy_afterinstall"返回。脚本中的任何非零返回值都应使部署生命周期事件失败。