带有“规则”的Gitlab计划作业未运行,因此无法触发

时间:2020-07-13 12:17:42

标签: gitlab gitlab-ci

我想在计划的上下文中运行一个或多个作业,因此使用特定的规则像这样声明它。 问题是管道既不会由我的调度配置触发,也不会在我通过调度管道UI手动触发时触发。我只是根本看不到任何触发的预定管道。

Gitlab版本:12.9.2

gitlab-ci.yml(部分):

workflow:
rules:
    -   if: $CI_COMMIT_TAG
    -   if: $CI_COMMIT_BRANCH

non-scheduled-job:
...
rules:
    -   if: '$CI_PIPELINE_SOURCE != "schedule"'


scheduled-job:
...
rules:
    -   if: '$CI_PIPELINE_SOURCE == "schedule"'
        when: always
    -   if: '$CI_PIPELINE_SOURCE != "schedule"'
        when: never

我知道不需要调度作业的第二条规则,但是即使没有此规则,管道也无法正常运行。

2 个答案:

答案 0 :(得分:1)

不幸的是,至于工作流逻辑,Gitlab 非常细枝末节。 如果您使用 Workflow 部分和 Rules 条件来处理您的工作,您必须明确声明“计划”类型的工作流部分中的管道以在您的配置中启用它:

workflow:                                                 
    rules:
      - if: '$CI_PIPELINE_SOURCE == "schedule"'
      ...

或者您可以在配置中启用所有类型的管道,只需在 workflow:rules

末尾添加
workflow:                                                 
  rules:
    ...
    - when: always

以其他方式,use 可以使用 except/only 符号表示计划作业,它会起作用,但前提是您的工作流程条件满足:

only:
  - schedules

如果您使用 include 选项,此方法可能会出现 merging conflicts。 因为合并允许您扩展和覆盖字典映射,但您不能向包含的数组添加或修改项目。因此,您必须在最后包含的 YAML 中明确声明所有先前添加的 workflow:rules 数组项或使用 anchors

有关详细信息,请参阅 issue

答案 1 :(得分:0)

您可以使用only

例如

scheduled-job:
  only:
    - schedules

https://docs.gitlab.com/ee/ci/pipelines/schedules.html

但是,当在其他作业中重用该代码段时, 不要与only / except一起使用规则。