Gitlab-ci:如果 MR 存在则触发 merge_request 分离管道,如果不存在则触发源分支管道。这两条管道不应同时运行
Posted
技术标签:
【中文标题】Gitlab-ci:如果 MR 存在则触发 merge_request 分离管道,如果不存在则触发源分支管道。这两条管道不应同时运行【英文标题】: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 【发布时间】:2021-12-17 01:57:46 【问题描述】:我想在创建 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
【问题讨论】:
【参考方案1】:覆盖在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'
这意味着您的管道将运行:
用于合并请求 对于分支管道,除非有打开的合并请求【讨论】:
它有效,谢谢您的回答。我还有一个快速的问题。在此工作流程之前,我的每个阶段都有only: variables: [ $sample == "one" ]
条件。现在我不能在工作流中使用它,不是吗?样本变量必须等于 1,否则不会运行。如何将此条件也应用于工作流规则?
@hammer89 您可以应用另一个规则——如果您需要该变量存在,请将带有&&
的条件添加到第一个和最后一个- if
规则中。像if: '$CI_COMMIT_BRANCH && $sample == "one"'
-- 如果您希望管道在该变量存在时另外运行(即,不考虑其他规则),您可以添加- if: '$sample == "one"'
作为另一个规则
再次感谢您。如果我想在我的阶段使用except: -tags
怎么办。据我所知,除了不能使用规则方法。我该如何使用来避免它?这也是我对此的另一个问题。 my another question以上是关于Gitlab-ci:如果 MR 存在则触发 merge_request 分离管道,如果不存在则触发源分支管道。这两条管道不应同时运行的主要内容,如果未能解决你的问题,请参考以下文章