如何防止 Gitlab CI 多个 yml 包含覆盖阶段的作业?
How can I prevent Gitlab CI multiple yml includes from overriding a stage's jobs?
在我的 Gitlab 项目中,我包含了多个 .yml 文件。一个是remote,一个是Gitlab提供的代码质量模板。
.yml配置是这样写的:
include:
- template: Code-Quality.gitlab-ci.yml
- remote: 'https://raw.githubusercontent.com/checkmarx-ltd/cx-flow/develop/templates/gitlab/v3/Checkmarx.gitlab-ci.yml'
这两个模板都可以访问。第一个位于 here, and the second Checkmarx one is here.
这两个 .yml 配置都定义了 运行 在 test
管道阶段的作业。
我遇到一个问题,只有第二个包含的作业在 test
阶段 运行ning,而 Gitlab 代码质量作业被完全忽略。如果我删除外部 Checkmarx 包含,代码质量工作 运行 就好了。
通常我会定义单独的阶段,但由于这些 .yml 文件不属于我,我无法更改它们所在的阶段 运行。
有没有办法保证test
阶段的作业全部运行?如果没有,有没有办法从外部 .yml 运行s 中覆盖作业的阶段?
奇怪的是,这两个模板之间似乎存在某种规则冲突,这可能是由于 checkmarx 模板设置的变量所致。尽管 CI Lint 显示所有 4 个作业都应该 运行 成功,但我可以使用上面的代码重现您的问题。
鉴于这可能是一个规则问题,我推翻了 运行 宁 code_quality
工作的规则,并且能够在同一个管道中获得两个 运行:
include:
- template: Code-Quality.gitlab-ci.yml
- remote: 'https://raw.githubusercontent.com/checkmarx-ltd/cx-flow/develop/templates/gitlab/v3/Checkmarx.gitlab-ci.yml'
code_quality:
rules:
- when: on_success
您可以对上述更改进行 lint 以确认它们是否成功(尽管 GitLab 会警告您没有任何 workflow:rules,您最终会在 MR 中使用重复的管道,这是事实)。
您还可以在这里看到管道 运行 这两个作业,尽管 checkmarx 失败了,因为我没有订阅来测试它:
在我的 Gitlab 项目中,我包含了多个 .yml 文件。一个是remote,一个是Gitlab提供的代码质量模板。
.yml配置是这样写的:
include:
- template: Code-Quality.gitlab-ci.yml
- remote: 'https://raw.githubusercontent.com/checkmarx-ltd/cx-flow/develop/templates/gitlab/v3/Checkmarx.gitlab-ci.yml'
这两个模板都可以访问。第一个位于 here, and the second Checkmarx one is here.
这两个 .yml 配置都定义了 运行 在 test
管道阶段的作业。
我遇到一个问题,只有第二个包含的作业在 test
阶段 运行ning,而 Gitlab 代码质量作业被完全忽略。如果我删除外部 Checkmarx 包含,代码质量工作 运行 就好了。
通常我会定义单独的阶段,但由于这些 .yml 文件不属于我,我无法更改它们所在的阶段 运行。
有没有办法保证test
阶段的作业全部运行?如果没有,有没有办法从外部 .yml 运行s 中覆盖作业的阶段?
奇怪的是,这两个模板之间似乎存在某种规则冲突,这可能是由于 checkmarx 模板设置的变量所致。尽管 CI Lint 显示所有 4 个作业都应该 运行 成功,但我可以使用上面的代码重现您的问题。
鉴于这可能是一个规则问题,我推翻了 运行 宁 code_quality
工作的规则,并且能够在同一个管道中获得两个 运行:
include:
- template: Code-Quality.gitlab-ci.yml
- remote: 'https://raw.githubusercontent.com/checkmarx-ltd/cx-flow/develop/templates/gitlab/v3/Checkmarx.gitlab-ci.yml'
code_quality:
rules:
- when: on_success
您可以对上述更改进行 lint 以确认它们是否成功(尽管 GitLab 会警告您没有任何 workflow:rules,您最终会在 MR 中使用重复的管道,这是事实)。
您还可以在这里看到管道 运行 这两个作业,尽管 checkmarx 失败了,因为我没有订阅来测试它: