gitlab - 当包含 .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 中“推送”。我的意图是让它成为一个全局规则,并尝试在我的项目中本地“覆盖”。
我希望我在问题描述中很清楚。将不胜感激任何帮助!
解决方案
您在工作流规则中缺少推送事件。$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
并添加错过的内容push
。
workflow
规则优先于所有其他规则,并且无法合并两个workflow
块。如果worfklow
在包含的 yml 文件和gitlab-ci.yml
本身中使用了块,则使用workflow
from 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
...
推荐阅读
- java - Java双向链表删除方法
- unity3d - Unity 编辑器和项目设置和首选项变成粉红色?
- python - Python - 如何将三个数组和输出组合为一个 json 文件
- javascript - 在主 Safari 浏览器而不是 WebView 中打开链接 - PWA (iOS)
- jqgrid - Free-jqGrid:根据自定义选择的操作数动态设置搜索输入
- sql - 如何在 PL/SQL 中并行获取所有行。我想在 csv 中为 ETL 导出 1 亿行
- java - 如何将自定义工具栏放在片段中?
- python - Python Tkinter - 蛇头跟随蛇身的问题
- reactjs - React中如何通过props加载本地图片?
- ios - 当单元格选择的自定义图像发生变化时如何进行?