You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GitLab CI中仅在前序任务失败时触发指定任务?

GitLab CI 通用失败触发休眠任务方案

核心思路

用GitLab CI的needs+rules组合,打造一个可复用的休眠任务,不用绑定特定阶段,只要指定要监听的前序任务,就能实现前序任务失败时自动触发休眠操作。

具体实现

1. 定义通用休眠模板

在.gitlab-ci.yml中添加可复用的模板,通过规则限制仅作用于定时流水线,且仅在前序任务失败时执行:

# 可复用的休眠任务模板,后续任务直接继承即可
.sleep_on_failure:
  script:
    - echo "前序任务失败,执行休眠操作"
    - sleep 3600  # 替换为你需要的休眠时长,示例为1小时
  rules:
    - if: '$CI_PIPELINE_SOURCE == "schedule"'  # 仅针对定时触发的流水线
      allow_failure: true  # 休眠任务自身失败不影响流水线最终状态
      needs: []  # 先清空默认依赖,后续按需指定监听任务

# 针对deploy-job1失败触发的休眠实例
sleep_after_deploy_job1_failure:
  extends: .sleep_on_failure
  needs: ["deploy-job1"]
  rules:
    - if: '$CI_PIPELINE_SOURCE == "schedule"'
      when: on_failure  # 仅当前序任务失败时启动

2. 适配多任务/多场景

如果需要监听多个任务(跨阶段也支持),只要在needs中列出所有要监听的任务即可,任意一个任务失败都会触发休眠:

# 监听deploy-job1、deploy-job2、test-job1,任一失败即触发休眠
sleep_on_any_failure:
  extends: .sleep_on_failure
  needs: ["deploy-job1", "deploy-job2", "test-job1"]
  rules:
    - if: '$CI_PIPELINE_SOURCE == "schedule"'
      when: on_failure

3. 关键配置说明

  • when: on_failure:GitLab CI内置规则,只要needs中指定的任务至少有一个失败,当前任务就会触发。
  • needs:明确绑定要监听的前序任务,避免休眠任务被无关任务干扰。
  • extends:通过模板复用代码,减少重复编写相同脚本和规则的工作量。
  • allow_failure: true:保证休眠任务的执行结果不会影响流水线整体状态,毕竟休眠只是补充操作。

注意事项

  • 确保GitLab版本在12.0及以上,该版本才支持when: on_failure和needs配置。
  • needs支持跨阶段指定任务,不用局限于同一阶段的任务。
  • $CI_PIPELINE_SOURCE == "schedule"的判断可以确保这套逻辑只作用于定时流水线,不影响手动或其他方式触发的流水线。

内容的提问来源于stack exchange,提问作者Shireto.Dor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 19:25:26