我如何 运行 **主要 CI 作业 **或** 包含的配置?

How do I run **either** the main CI jobs **or** an included configuration?

所以我有这个 GitLab CI 配置,其中我的主要 .gitlab-ci.yml 文件如下所示:


include:
  - local: '/path/to/local/configuration.yml'

test:
  script:
    - echo "hello world"
# ...
# lots of more jobs here

我想要实现的是 运行 要么 configuration.yml 要么 全部.gitlab-ci.yml.

中的工作 (~30)

禁用一项工作很容易,因为我可以在 configuration.yml 中包含一个 workflow: 配置,这让我可以选择性地 enable/disable 该配置。

但是我在 .gitlab-ci.yml 中做什么?我试过

workflow:
  rules:
    - if: '$DONT_RUN_DEFAULT_PIPELINE'
      when: never
    - when: always

但似乎 GitLab 读取了此配置,其他配置也被忽略,因为如果设置 $DONT_RUN_DEFAULT_PIPELINE.

则根本不会创建管道

我真的必须一一修改 .gitlab-ci.yml 中的所有现有工作吗?

您最好使用条件包含。

获取 30 个作业并将它们提取到一个自己的 yaml 文件中,我们称之为 default.gitlab-ci.yml

使用 GitLab 的最新版本,您可以获得条件包含,并且可以执行以下操作:


include:
  - local: '/path/to/local/configuration.yml'
    rules:
      - if: '$DONT_RUN_DEFAULT_PIPELINE == "true"'

  - local: 'default.gitlab-ci.yml'
    rules:
      - if: '$DONT_RUN_DEFAULT_PIPELINE != "true"'

https://docs.gitlab.com/ee/ci/yaml/index.html#rules-with-include

请注意,此功能自 GitLab 14.3 起可用

示例使用 Child / Parent Pipelines:

trigger_default:
  trigger:
    include: default.yml
  rules:
    - if: '$DONT_RUN_DEFAULT_PIPELINE != "true"'

trigger_special:
  trigger:
    include: special.yml
  rules:
    - if: '$DONT_RUN_DEFAULT_PIPELINE == "true"'