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

GitLab CI rules条件不生效:speed任务未按指定日期执行

解决GitLab CI speed任务仅每月6号执行不生效的问题

问题根源

你在全局variables块中用$(date +%d)定义TODAYS_DAY的方式不生效——GitLab CI的全局变量不会执行shell命令,TODAYS_DAY的实际值是字符串$(date +%d),而非当前日期的日数字,导致规则判断永远不成立。

解决方法

改用GitLab提供的预定义变量CI_PIPELINE_CREATED_AT(格式为ISO 8601,如2024-06-06T10:00:00Z),通过CI内置的date()函数提取日部分进行判断,无需自定义shell变量。

修改后的配置示例

移除全局变量中的TODAYS_DATE、TODAYS_DAY、TODAYS_MONTH,并调整speed任务的rules:

stages:
  - speed
  - watcher

variables:
  # setup cache in root folder so gitlab cache can pick it up
  PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"

include:
  - local: "ci/ci_job_speed.yml"
  - local: "ci/ci_job_watcher.yml"

speed:
  extends: .speed
  stage: speed
  rules:
    - if: 'date("%d", $CI_PIPELINE_CREATED_AT) == "06"'
      when: always

watcher:
  when: always
  extends: .watcher
  stage: watcher
  rules:
    - if: '($CI_COMMIT_AUTHOR !~ /.*Gitlab Runner.*/ && $CI_COMMIT_BRANCH == "test") || $CI_PIPELINE_SOURCE != "push"'

cache:
  paths:
    - .cache/pip
    - .cache/poetry
    - .venv
  key: "globalcache"

补充说明

如果你的GitLab版本较旧(低于13.1),date()函数可能不支持,此时可以在speed任务的before_script中通过shell命令设置日期变量,再结合任务内的判断逻辑跳过非6号的执行,但这种方式不如预定义变量表达式直接可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:20:47