首页/开发/CI/CD 与发布速查/GitLab CI retry 与 timeout
工具链要点63 条

GitLab CI retry 与 timeout

对特定失败原因自动重试,并给作业设置超时上限:重试用于基础设施抖动,超时防止挂起作业长期占用资源。

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

retry 与 timeout 是干什么的

对特定失败原因自动重试,并给作业设置超时上限:重试用于基础设施抖动——runner 系统故障、卡死超时这类;超时防止挂起作业长期占用资源与并发额度。原则是脚本失败不重试、基础设施失败可重试。重试范围越窄越好,把脚本失败也纳入重试只会掩盖真实缺陷,让不稳定代码进入主干。

基本信息

retrymax(次数)与 when(失败类型)
类型runner_system_failure、stuck_or_timeout_failure 等
timeout作业级超时(如 30m)
原则脚本失败不重试,基础设施失败可重试
交互重试的作业重新走超时计时

典型使用场景

  • 基础设施抖动:runner 节点故障时自动补跑
  • 卡死清理:超时上限保证挂起作业自动结束
  • 长任务保护:编译与集成测试按实际时长设置上限
  • 避免掩盖缺陷:脚本失败保持不重试
  • 并发治理:超时释放被占用的并发额度
  • 分级差异:不同作业按风险设置不同上限

只重试基础设施失败

只重试基础设施失败
test:
  script: [make test]
  timeout: 30m             # 超时上限:挂起作业自动结束
  retry:
    max: 2                 # 最多重试 2 次
    when: [runner_system_failure, stuck_or_timeout_failure]
    # 不列 script_failure:脚本失败重试会掩盖缺陷

参数读法

参数含义注意
max重试次数上限次数过多掩盖问题
when触发重试的失败类型范围越窄越好
timeout作业最长时长按实际时长留余量
卡死超时类stuck_or_timeout_failure常见基础设施类失败
执行器故障runner_system_failure典型可重试类型
重试范围越窄越好:把脚本失败也纳入重试会掩盖真实缺陷。
超时按实际时长校准:太紧频繁误杀,太松失去保护意义。
重试是补救不是策略:频繁命中说明执行器或网络需要治理。

组合与默认值

  • 超时与重试组合:重试后重新计时,累计时长要能接受
  • 默认值核对:未写超时的作业走项目级默认,先核对全局值再覆盖
超时终止会标记为超时类失败,可用重试类型匹配自动补跑一次。

易错点

  • retry when: always:不稳定测试被重试掩盖后进入主干
  • 不设 timeout:卡死作业占用并发额度直到人工处理
  • 超时设得过大:故障作业长时间空转,额度长期被占用
  • 重试次数过多:同一失败反复消耗资源,超过两次应转人工排查

数据来源与参考

  • GitLab Docs《Retry failed jobs》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌