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
相关产品推荐
相关产品推荐

