如何防止 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 失败了,因为我没有订阅来测试它: