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

dom*_*dom 4 gitlab gitlab-ci

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

亚特实验室版本: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
Run Code Online (Sandbox Code Playgroud)

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

Cyr*_*ori 5

不幸的是,对于工作流逻辑,Gitlab 非常不稳定。如果您对作业使用“工作流程”部分和“规则”条件,则必须在“工作流程”部分中明确声明“计划”管道类型,才能在配置中启用它:

workflow:                                                 
    rules:
      - if: '$CI_PIPELINE_SOURCE == "schedule"'
      ...
Run Code Online (Sandbox Code Playgroud)

或者您可以在配置中启用所有类型的管道,只需在工作流程结束时添加:规则

workflow:                                                 
  rules:
    ...
    - when: always
Run Code Online (Sandbox Code Playgroud)

换句话说,可以对计划作业使用except/only表示法,并且它会起作用,但前提是满足您的工作流程条件:

only:
  - schedules
Run Code Online (Sandbox Code Playgroud)

如果您使用include选项,此方法可能会出现合并冲突。因为合并允许您扩展和覆盖字典映射,但您无法向包含的数组添加或修改项目。因此,您必须在最后包含的 YAML 中明显声明所有先前添加的工作流程:规则数组项或使用锚点

详情请参阅问题。