GitLab CI/CD:如何让job3仅执行定时调度并排除常规流水线
GitLab CI 配置修正方案
问题根源
- job3仍出现在常规流水线:你仅给job3配置了「流水线源为schedule时运行」的规则,但未明确设置「非schedule场景下不执行」,默认情况下未匹配规则的job会被标记为
skipped并显示在流水线中,而非完全排除。 - 定时调度运行所有任务:job1、job2未添加任何规则限制,它们会在所有类型的流水线(包括定时调度)中默认执行。
实现需求的正确配置
要实现「job3仅在定时调度运行,常规流水线排除job3且定时调度仅跑job3」,需同时给三个job添加规则限制:
image: # 填写你的镜像地址 stages: - job1 - job2 - job3 job1: dependencies: [] stage: job1 rules: - if: $CI_PIPELINE_SOURCE != "schedule" # 仅在非定时调度的流水线运行 script: # 填写job1的脚本内容 job2: dependencies: [] stage: job2 rules: - if: $CI_PIPELINE_SOURCE != "schedule" # 仅在非定时调度的流水线运行 script: # 填写job2的脚本内容 job3: dependencies: [] stage: job3 rules: - if: $CI_PIPELINE_SOURCE == "schedule" # 仅在定时调度时运行 when: always - when: never # 其他场景直接排除该job script: # 填写job3的脚本内容
配置说明
- job1、job2的规则:通过
$CI_PIPELINE_SOURCE != "schedule"限定仅在手动推送、MR等常规流水线中执行,定时调度时会被直接排除。 - job3的规则:第一条规则匹配定时调度场景并强制运行;第二条规则作为兜底,确保所有非定时场景下job3不会出现在流水线中(而非标记为skipped)。
内容的提问来源于stack exchange,提问作者Ragnarsson
相关产品推荐
相关产品推荐

