GitLab-ci:如果MR存在,则只触发MERGE_REQUEST DETACH流水线,如果不存在,则触发源分支流水线。这两条管道不应同时运行 [英] Gitlab-ci: if MR exist just trigger merge_request detach pipeline, if not trigger source branch pipeline. Those 2 pipelines shouldn't run in same time

查看:95
本文介绍了GitLab-ci:如果MR存在,则只触发MERGE_REQUEST DETACH流水线,如果不存在,则触发源分支流水线。这两条管道不应同时运行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在创建MR时查看MR(合并请求)命令部分中的声纳结果

我的主要期望:

  • 如果源分支存在MR,则触发分离管道(不触发功能管道。我只需要那个来查看MR命令中的声纳结果)
  • 如果源分支没有MR,只需触发正常功能(源)分支管道

我试着用下面的示例阶段来做这件事。但是当我将提交推送到源管道时,而源分支存在MR。我还是有两条管道。分离和源管道正在运行,我不希望同时看到这两个管道,此外,除非不使用规则配置。如何将除区段与规则部件集成。

这是我的GitLab-ci阶段:

deploy:
  stage: deployment
  when: manual
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CUSTOM_VARIABLE == "true" || $CUSTOM_VARIABLE == "true"'
  script:
    - ....
    - ....
  except:
    - tags
    - main

我还尝试了以下规则,如果其中一条符合我的条件,则不要运行另一条。但它仍会触发两个管道。

deploy:
  stage: deployment
  when: manual
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CUSTOM_VARIABLE == "true"'
      when: on_success
    - if: '$CI_PIPELINE_SOURCE == "push" && $CUSTOM_VARIABLE == "true"'
      when: on_success
  script:
    - ....
    - ....
  except:
    - tags
    - main

推荐答案

workflow:rules templates中所述,在这种情况下,您可以使用CI_OPEN_MERGE_REQUESTS variable来确定是为合并请求运行管道还是仅运行功能分支。

如果同时使用[合并请求的管道和分支管道],则可能会同时运行重复的管道。若要防止重复管道,请使用CI_OPEN_MERGE_REQUESTS变量。

使用workflow:rules可以对整个管道执行此操作,但同样的原则也可以应用于单个作业。

workflow:
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
    - if: '$CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS'
      when: never
    - if: '$CI_COMMIT_BRANCH'

这意味着您的管道将运行:

  • 用于合并请求
  • 分支管道,除非有打开的合并请求

这篇关于GitLab-ci:如果MR存在,则只触发MERGE_REQUEST DETACH流水线,如果不存在,则触发源分支流水线。这两条管道不应同时运行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆