当另一个作业包含 'only' 时在管道中显示 GitLab 作业

Show GitLab job in the pipeline when another job contains 'only'

我需要设置 .gitlab-ci.yml 管道,以便一些作业在任何地方执行(没有 only 和 except),而一些作业,如 Deploy 步骤,只在 master 分支上执行。但是当我添加到 Deploy only: 时,如果没有为它们指定 only: 属性,我的其他作业将变得不可见。例如 - Test 工作将被隐藏在任何地方。

有没有办法配置 GitLab 以在没有 only/except 配置的情况下在任何地方显示测试作业?

---
stages:
  - Tests
  - Build
  - Deploy

Test:
  stage: Tests

Build:
  stage: Build
  only:
    - master
    - merge_requests

Deploy:
  stage: Deploy
  only:
    - master

管道中所需职位的可见性:

您观察到的行为是由于为您的项目创建合并请求的管道。

您正在观察的缺少作业的管道是合并请求管道。在 合并请求管道 .

中,只有 only: - merge_requests 的作业才会 运行

您会注意到在您的管道列表中还有 一个分支管道,可能 运行 或多或少如您所料。但是,此管道不会显示在合并请求中 UI -- 在 MR UI 中,仅考虑 合并请求管道

要解决此问题,您可以将以下内容添加到测试作业中:

Test:
  # ...
  only:
    - pushes
    - schedules
    - api
    - web
    - triggers
    - merge_requests # enable pipelines for merge requests

或者更简单地使用 rules:

Test:
  rules: # enable pipelines for merge requests
    - when: on_succes

如果您想继续使用管道进行合并请求并避免在测试作业中使用 only/except,则需要改用 rules:。当使用管道进行合并请求时,无法避免以 some 方式为此配置测试作业。

或者,如果您可以避免合并请求管道功能并使用 rules:(或等效的 only/except),则可以避免配置 Test 作业获得您想要的行为,但有一些注意事项。

include: # disable pipelines for merge requests
  - template: 'Workflows/Branch-Pipelines.gitlab-ci.yml'

Test:
  stage: test
  # ...

Build:
  rules: # run when merge requests are open
    - if: $CI_OPEN_MERGE_REQUESTS
      when: on_success
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
      when: on_success  # run when on default branch
    - when: never # otherwise, do not run

Deploy:
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
      when: on_success
    - when: never

注意事项:要捕获 CI_OPEN_MERGE_REQUESTS 规则,合并请求必须在管道启动之前存在,或者必须在创建 MR 之后触发。这显然也排除了合并请求管道功能的使用。