首页 > 解决方案 > 当包含 .yml 包含工作流规则时,CI 管道不会自动运行

问题描述

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

# 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 工作流关键字文档

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

这意味着如果任何一个规则评估为真,则管道应该已经运行,而当我添加本地工作流规则时没有发生这种情况。

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

我希望我在问题描述中很清楚。将不胜感激任何帮助!

标签: gitlabgitlab-ci

解决方案


您在工作流规则中缺少推送事件。$CI_PIPELINE_SOURCE

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并添加错过的内容pushworkflow规则优先于所有其他规则,并且无法合并两个workflow块。如果worfklow在包含的 yml 文件和gitlab-ci.yml本身中使用了块,则使用workflowfrom the gitlab-ci.yml。您可以在 gitlab中检查CI/CD-> Editor-> 。View merged YAML

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

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

...

推荐阅读