Gitlab-ci: 如果 MR 存在就触发 merge_request 分离管道,如果不存在则触发源分支管道。这 2 个管道不应该同时 运行

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

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

我的主要期望:

我尝试在下面的示例阶段做到这一点。但是当我将提交推送到源管道时,源分支存在 MR。我仍然得到双管道。分离和源管道是 运行ning,我不想同时看到这两个管道,除了不使用规则配置。如何将除外部分与规则部分集成。

这是我的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, In this case, you can use the CI_OPEN_MERGE_REQUESTS variable 中介绍了确定 运行 合并请求的管道还是仅功能分支。

If you use both [pipelines for merge requests and branch pipelines], duplicate pipelines might run at the same time. To prevent duplicate pipelines, use the CI_OPEN_MERGE_REQUESTS variable.

使用 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'

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

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