首页/开发/CI/CD 与发布速查/允许失败作业(allow_failure / continue-on-error)
流水线设计54 条

允许失败作业(allow_failure / continue-on-error)

把「实验结果」「非阻塞扫描」标记为允许失败:不阻断主流程,但结果仍可在页面上查阅。

CI/CD 与发布速查开发更新于 2026-10-13

允许失败是什么

把「实验结果」「非阻塞扫描」标记为允许失败:作业失败不阻断主流程,但结果仍可在平台上查阅。GitLab 用 allow_failure: true,可以精确到退出码;GitHub 用 continue-on-error 在作业级或步骤级声明。它是「先观察再收紧」的治理工具:新引入的检查先非阻塞跑一段时间,稳定后再纳入门禁。判绿不等于没失败:非阻塞结果要有人跟踪,否则等于静默丢失。

基本信息

GitLaballow_failure: true(或 allow_failure.exit_codes 精确到退出码)
GitHubjobs.<id>.continue-on-error: true 或步骤级 continue-on-error
适用实验性检查、信息性扫描、非关键平台
过渡用法新检查先非阻塞运行,观察稳定后收紧为阻断
注意非阻塞作业失败时整体流水线仍判绿,容易无人查看

典型使用场景

  • 引入新扫描器:先非阻塞跑数周,误报降下来再转阻断
  • 非关键平台:次要平台测试失败不拖住主平台发布
  • 实验性检查:性能基准波动大,先观察趋势
  • 退出码细粒度:只对特定退出码放行(如超时 137)
  • 灰度门禁:新规则先在部分分支非阻塞试用

GitLab exit_codes

GitLab exit_codes
scan:
  script: ./ci/flaky-scan.sh
  allow_failure:
    exit_codes: [137]

GitHub 写法

GitHub 写法
jobs:
  optional-native-test:
    continue-on-error: true

状态判定速查

配置失败时流水线适合的检查
默认阻断红,拦住后续正确性测试与安全门禁
allow_failure绿,保留结果观察期内的新检查
exit_codes 限定仅指定码放行超时等过程性失败
continue-on-error绿,步骤继续可选的兼容性验证
允许失败范围过宽会让真实故障长期被忽略:定期复查这些作业的失败率。
过渡期要有期限:非阻塞是过程不是终点,登记转入阻断的时间点与责任人。

收紧节奏建议

  • 观察期:收集失败原因分布,区分误报与真问题
  • 先收紧退出码:确认有效的检查先改为阻断
  • 保留豁免:确需放行的检查写明原因与复核时间
  • 指标入板:非阻塞作业的失败率与误报率进看板
按分支区分:主干门禁从严、功能分支可放宽,规则用分支条件表达。

易错点

  • 把所有扫描都设为允许失败:门禁形同虚设,风险积累到生产
  • 允许失败的作业失败率无人跟踪:应纳入流水线健康度例会看板
  • exit_codes 配置过窄:实际失败码未被覆盖时依旧判绿,定期核对真实退出码
  • 非阻塞检查长期不收紧:过渡状态变永久状态,补上到期提醒
  • 非阻塞长期掩盖问题:编译告警类检查天天失败无人处理,定期核查并收紧

数据来源与参考

  • GitLab Docs《allow_failure》
  • GitHub Docs《Workflow syntax for GitHub Actions》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌