我正在尝试将外部 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 中“推送”。我的意图是让它成为一个全局规则,并尝试在我的项目中本地“覆盖”。
我希望我在问题描述中很清楚。非常感谢您的帮助!
答案 0 :(得分:1)
您的工作流规则中缺少 $CI_PIPELINE_SOURCE
的 push 事件。
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