关于GitLab工作流Rules规则逻辑的疑问
关于GitLab工作流Rules规则逻辑的疑问
嘿,这个问题我刚接触GitLab Rules的时候也懵过,我给你掰扯清楚~ 你对GitLab Rules「只要一个if满足就生效」的理解完全没错,文档里的表述只是换了个说法,和你的逻辑其实是一致的。
先把这段配置拆解开看:
workflow: rules: - if: $CI_COMMIT_TITLE =~ /-draft$/ when: never - if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
GitLab的Rules是从上到下依次匹配,只要命中第一个符合条件的规则,就执行对应的when动作,同时停止检查后续所有规则:
- 第一优先级检查:如果提交标题以
-draft结尾,直接触发when: never——也就是完全不创建流水线,后面的规则连看都不会看。 - 如果第一步没命中(也就是标题不是draft结尾),就看第二条规则:如果当前是合并请求(MR)事件,这条规则没写
when,默认是when: always,所以会创建流水线,之后也不会再检查第三条规则。 - 如果第二条也没命中,就看第三条规则:如果当前分支是项目的默认分支,同样默认
when: always,创建流水线。 - 要是以上三条都没命中,那就不会创建流水线。
文档里说的「either A merge request or The default branch」,其实就是在说:排除了draft标题的前提下,只要满足MR或者默认分支其中任意一个条件,就会触发流水线——这正好就是你理解的「只要一个if成立就生效」的逻辑呀!
换个直白的说法,这个配置的逻辑就是:
只有当提交标题不以
-draft结尾,并且(是MR事件 或者 是默认分支)的时候,才会创建流水线。
这里的「either」只是用来描述后面两个条件是二选一的关系,和你对Rules的逻辑理解完全不冲突哦~
备注:内容来源于stack exchange,提问作者Jim
相关产品推荐
相关产品推荐

