我有一个有两个实例的AWS。我已配置CodeDeploy以在所有实例上自动部署我的项目。
在appspec.yml
我有那个部分:
hooks:
AfterInstall:
- location: codedeploy_scripts/deploy_afterinstall
timeout: 300
runas: root
deploy_afterinstall
是一个简单的bash脚本。有时其中的一些命令会失败。例如,此命令用于更新/安装composer依赖项。
if [ -f "composer.lock" ]; then
composer update -n
else
composer install -n
fi
但CodeDeploy会忽略此脚本中的任何错误,并始终表示部署成功。我该如何改变这种行为?当钩子中的某些命令没有成功完成并且在部署控制台或日志中看到错误时,我希望部署失败。
答案 0 :(得分:9)
我最初遇到了与CodeDeploy类似的问题。我建议你的bash脚本更严格:
Project.RoomId -> Room.Id
ProjectEmployees.ProjectId -> Project.Id
ProjectEmployees.EmployeeId -> Employee.Id
EmployeeQualifications.EmployeeId -> Employee.Id
EmployeeQualifications.QualificationId -> Qualification.Id
通过将e,u和o pipefail设置为选项,Bash将更像是一种编程语言而不像脚本。您可以阅读有关"Bash Strict Mode" here的更多信息。
当您的编辑器安装或更新失败时,Bash将以非零代码退出,代码部署将失败。
答案 1 :(得分:2)
CodeDeploy代理依赖脚本“deploy_afterinstall”的退出状态来确定部署生命周期事件是成功还是失败。您可能希望查看是否可以捕获在脚本中运行的命令的退出状态,并从“deploy_afterinstall”返回该命令。脚本中的任何非零返回值都应该使部署生命周期事件失败。