CloudFormation部署失败时Github Action未触发失败问题排查
解决Github Action中AWS CloudFormation多栈部署失败不终止的问题
问题原因
bash脚本默认不会因单个命令执行失败而终止后续操作,只有最后一条命令的退出码会作为整个脚本的退出码返回给Github Action。这就导致前面的CloudFormation栈部署失败时,脚本仍会继续执行后续部署命令,若最后一条命令成功,Action就会错误地标记为执行成功。
解决方案
在deploy.sh脚本的开头添加set -e指令,让脚本在任何命令返回非零退出码(即执行失败)时立即终止,并将该退出码返回给Github Action。
修改后的deploy.sh示例
# 启用命令失败立即终止脚本的功能 set -e aws cloudformation deploy \ --stack-name test-${ENVIRONMENT} \ --template-file src/events/test/infrastructure.yml \ --capabilities CAPABILITY_NAMED_IAM \ --no-fail-on-empty-changeset aws cloudformation deploy \ --stack-name test1-${ENVIRONMENT} \ --template-file src/events/test1/infrastructure.yml \ --capabilities CAPABILITY_NAMED_IAM \ --no-fail-on-empty-changeset
额外优化(可选)
如果脚本中存在管道操作,建议使用set -eo pipefail替代set -e,这样不仅会捕获单个命令的失败,还会捕获管道中任意阶段的失败,进一步提升脚本的健壮性:
set -eo pipefail
内容的提问来源于stack exchange,提问作者A. Hasemeyer
相关产品推荐
相关产品推荐

