gitlab-ci 规则仅适用于合并请求的手动作业

ube*_*ebu 3 gitlab gitlab-ci

我发现很难将一个阶段限制为仅在 MR 上运行并且是手动的

我有以下规则

    rules:
        - when: manual
        - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
        - if: '$CI_COMMIT_BRANCH'
          when: never
Run Code Online (Sandbox Code Playgroud)

但是这个阶段仍然在分支下运行,我不希望它在任何分支上运行,只在MR上运行

这简直让我发疯。代码显示了应该发生什么,但它只是不遵循它

那么我错过了什么?

Som*_*ceS 5

文档中:

该作业已添加到管道中:

  • 如果 if、changes 或exists 规则匹配并且也有when: on_success(默认)、when: delayedwhen: always
  • 如果达到一条规则,则只有when: on_success, when: delayed, 或when: always

该作业未添加到管道中:

  • 如果没有规则匹配。
  • 如果规则匹配并且有when: never.

因此,为了实现您的要求(即add manual job only on MR, otherwise, do not add the job),正确的顺序应该是:

rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
      when: manual
    - when: never
Run Code Online (Sandbox Code Playgroud)

这翻译为:“当第一个 if 匹配时 -> 手动添加作业,在所有其他情况下 -> 不添加作业”。