禁用Gitlab中每个提交的管道,仅在打开合并请求时运行它

jj1*_*456 8 gitlab gitlab-ci

CI管道在工作时在我的Gitlab存储库中的每个提交上运行。有没有办法禁用它,并且仅在对master分支的打开合并请求上运行CI管道?

任何帮助表示赞赏。谢谢。

yam*_*enk 18

目前没有配置选项可以做到这一点。以下是一些可用于“禁用”管道构建的内容。

  • [ci skip]在提交消息中添加不会在推送时触发管道。
  • 管道内所有作业的使用exceptonly选项。在这种情况下,为避免重复,您可以使用Anchors

更新:GitLab 11.7

推送到 GitLab 时,您可以通过将 ci.skip 选项传递给 push 命令来跳过触发管道: git push -o ci.skip


Ver*_*_us 11

您可以在 .gitlab-ci.yaml 的开头添加类似的内容

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

有关更多信息,请参阅合并请求管道


Max*_*nce 9

更新在2020年,因为与解决方案only,并except为弃用的候选人:https://docs.gitlab.com/ee/ci/yaml/#onlyexcept-basic

仍然在.gitlab-ci.yml你现在应该使用rules:见https://docs.gitlab.com/ee/ci/yaml/#rules

我只是在我的构建作业上设置此规则,该作业被“阻止”并等待来自 UI 的手动触发。

 rules:
   - when: manual
Run Code Online (Sandbox Code Playgroud)

并不是说我们可以创建更高级的规则和条件来触发,例如,如果我们看到一个 git 标签。

https://docs.gitlab.com/ee/ci/yaml/#exclude-jobs-with-rules-from-certain-pipelines

  • 应该注意的是,这会创建一个手动作业,该作业不会立即运行,而是需要单击 GitLab UI 上的按钮才能运行。该问题要求更改触发器类型,从提交更改为仅针对开放的合并请求。我认为你想做类似[给出的例子](https://docs.gitlab.com/ee/ci/yaml/#switch- Between-branch-pipelines-and-merge-request-pipelines)` if: $CI_PIPELINE_SOURCE == "merge_request_event"` 等等 (3认同)

小智 8

您只需添加[ci skip]到提交消息即可,构建将被跳过

https://gitlab.com/gitlab-org/gitlab-ce/issues/14499


Ben*_*eke 7

是的,但前提是您在管道中的每个作业上都设置了它。

https://docs.gitlab.com/ee/ci/yaml/#onlyexcept-basic

job:
  script: echo 'test'
  only:
    - merge_requests
Run Code Online (Sandbox Code Playgroud)

该作业只会在作为合并请求一部分的提交上运行,而不是每次将提交推送到分支上。如果您将每个作业都设置为该设置,则管道将永远不会运行。


小智 1

不。(还没有!)您可以在此处关注预期的功能开发。

https://gitlab.com/gitlab-org/gitlab-ce/issues/23902

但是,您可以使用“maofr”的代码自动触发管道

https://gitlab.com/gitlab-org/gitlab-ce/issues/23902#note_88958643