如何确保CodeBuild阶段即使出现错误也永不失败?
解决方案
1. 配置3个并行运行的阶段
CodeBuild 通过为多个阶段设置相同的 run-order 值实现并行执行。默认情况下,pre_build 阶段的 run-order 为0,会优先执行;将需要并行的3个阶段的 run-order 设为1,就能让它们在 pre_build 完成后同时启动。
2. 解决命令返回非0导致构建失败的问题
仅设置 on-failure: CONTINUE 只能让阶段内某条命令失败后继续执行后续命令,但无法阻止整个阶段被标记为失败,进而导致构建终止。finally 块里的 exit 0 也无法覆盖阶段的失败状态——因为CodeBuild的阶段状态由其内部命令的最终退出码决定。
可行的解决方式是给每个可能返回非0的命令添加 || true,强制命令无论执行结果如何都返回0退出码;也可以用脚本包裹命令,捕获错误后返回0。
修改后的buildspec.yaml示例
version: 0.2 phases: pre_build: commands: - echo Installing SCA tool... - pip install pip-audit build_phase_1: run-order: 1 on-failure: CONTINUE commands: - echo Running build phase 1... - pip-audit -r requirements.txt || true build_phase_2: run-order: 1 on-failure: CONTINUE commands: - echo Running build phase 2... - some-potentially-failing-command || true build_phase_3: run-order: 1 on-failure: CONTINUE commands: - echo Running build phase 3... - another-failable-command || true
关键说明
run-order: 1:指定3个构建阶段并行执行,且在pre_build完成后启动。|| true:强制命令返回0退出码,避免单条命令失败导致阶段被标记为失败,从而保证整个构建不会终止。on-failure: CONTINUE:确保阶段内某条命令失败时,该阶段的后续命令仍能正常执行,配合|| true实现演示所需的“永不失败”效果。
内容的提问来源于stack exchange,提问作者Jatin Mehrotra
相关产品推荐
相关产品推荐

