允许失败是什么
把「实验结果」「非阻塞扫描」标记为允许失败:作业失败不阻断主流程,但结果仍可在平台上查阅。GitLab 用 allow_failure: true,可以精确到退出码;GitHub 用 continue-on-error 在作业级或步骤级声明。它是「先观察再收紧」的治理工具:新引入的检查先非阻塞跑一段时间,稳定后再纳入门禁。判绿不等于没失败:非阻塞结果要有人跟踪,否则等于静默丢失。
基本信息
| GitLab | allow_failure: true(或 allow_failure.exit_codes 精确到退出码) |
|---|---|
| GitHub | jobs.<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 | 绿,步骤继续 | 可选的兼容性验证 |
允许失败范围过宽会让真实故障长期被忽略:定期复查这些作业的失败率。
过渡期要有期限:非阻塞是过程不是终点,登记转入阻断的时间点与责任人。
收紧节奏建议
- 观察期:收集失败原因分布,区分误报与真问题
- 先收紧退出码:确认有效的检查先改为阻断
- 保留豁免:确需放行的检查写明原因与复核时间
- 指标入板:非阻塞作业的失败率与误报率进看板
按分支区分:主干门禁从严、功能分支可放宽,规则用分支条件表达。