包含时 CI 管道不会自动运行 .yml 包含工作流规则

时间:2021-06-10 16:56:00

标签: gitlab gitlab-ci

我正在尝试将外部 GitLab CI YAML 文件包含到我的项目本地 .gitlab-ci.yml 文件中。我的另一个 GitLab 项目 ci/cd > templates 中的外部 YAML 包含一些工作流规则

# ci-cd.yml

workflow:
  rules:
    - if: '$TRACK != null' # TRACK is the environment type (staging/production)
      when: always
    - if: '$CI_PIPELINE_SOURCE =~ /^trigger|pipeline|web|api$/'
      when: always

以下是我的本地项目 .gitlab-ci.yml

include:
- '/.gitlab-ci-test.yml'
- project: 'ci-cd/templates'
  file: 'ci-cd.yml'

...

问题是 - 当我将更改推送到 GitLab 时,我在本地包含的 .gitlab-ci-test.yml 中定义的所有作业都不会被触发,即使作业设置了 when: always。似乎外部 ci-cd.yml 中的工作流规则不允许作业运行。

我还尝试在本地向 .gitlab-ci.yml 添加一个评估为 true 的工作流规则,因为 GitLab workflow keyword docs

<块引用>

当没有规则评估为真时,管道不会运行。

这意味着,如果任何规则的评估结果为真,管道应该已经运行,这在我添加本地工作流规则时没有发生。

EDIT - 许多项目都使用具有工作流规则的外部文件,因此无法修改它以在 $CI_PIPELINE_SOURCE 中“推送”。我的意图是让它成为一个全局规则,并尝试在我的项目中本地“覆盖”。

我希望我在问题描述中很清楚。非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您的工作流规则中缺少 $CI_PIPELINE_SOURCEpush 事件。

workflow:
  rules:
    - if: '$TRACK != null' # TRACK is the environment type (staging/production)
      when: always
    - if: '$CI_PIPELINE_SOURCE =~ /^trigger|pipeline|push|web|api$/'
      when: always

编辑:如果您无法更改包含文件中的 workflow 规则,我看到的唯一选项是复制 workflow 中的 gitlab-ci.yml 并添加丢失的 { {1}} 那里。 push 规则优先于所有其他规则,不可能合并两个 workflow 块。如果在包含的 yml 文件中使用 workflow 块和 worfklow 本身,则使用 gitlab-ci.yml 中的 workflow。您可以在 gitlab 中的 gitlab-ci.yml -> CI/CD -> Editor 中检查。

View merged YAML