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

如何让GitLab定时流水线触发的子任务仅在指定日期运行

实现方案

方案1:父流水线判断星期后传递控制变量(推荐)

该方案将日期判断逻辑集中在主调度流水线侧,后续调整规则无需批量修改子项目配置,适合子项目较多的场景。

  • 第一步:修改主流水线配置,新增前置步骤计算当前工作日,触发子流水线时传递标识变量
    主项目gitlab.yml示例:
# 前置检查任务:计算当前是否为周一
pre-check-weekday:
  stage: .pre
  script:
    # date +%u 输出1-7对应周一到周日
    - echo "IS_MONDAY=$(date +%u | grep -q '^1$' && echo 'true' || echo 'false')" >> build.env
  artifacts:
    reports:
      dotenv: build.env

main job:
  needs: ["pre-check-weekday"]
  trigger:
    project: 你的子项目路径
    # 向子流水线传递控制变量
    variables:
      PARENT_TRIGGER: "true"
      IS_MONDAY: $IS_MONDAY
  • 第二步:修改子流水线任务规则,仅在符合要求的场景下执行
    子项目gitlab.yml示例:
child job:
  rules:
    # 场景1:非父流水线触发,直接执行,不受日期限制
    - if: $PARENT_TRIGGER != "true"
      when: on_success
    # 场景2:父流水线触发,且当前不是周一才执行
    - if: $PARENT_TRIGGER == "true" && $IS_MONDAY == "false"
      when: on_success
    # 其余场景不执行
    - when: never
  script:
    - # 原有任务逻辑

方案2:子流水线自行判断(无需修改父流水线)

如果没有权限修改主流水线配置,可以将判断逻辑放在子流水线侧,通过GitLab内置变量区分触发来源。
子项目gitlab.yml示例:

child job:
  rules:
    # 非上游流水线触发,直接执行
    - if: $CI_PIPELINE_SOURCE != "pipeline"
      when: on_success
    # 上游流水线触发时,先校验日期
    - if: $CI_PIPELINE_SOURCE == "pipeline"
  before_script:
    # 被父流水线触发且为周一,直接正常退出跳过执行
    - if [ $(date +%u) -eq 1 ]; then echo "周一被父流水线触发,跳过当前任务" && exit 0; fi
  script:
    - # 原有任务逻辑

内容的提问来源于stack exchange,提问作者Christian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:15:03