我的
.gitlab-ci.yaml
文件中有一份工作,其规则如下:
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
changes:
- src/**/*
- if: $CI_COMMIT_BRANCH
changes:
- src/**/*
- if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS
when: never
我期望它只在两种情况下运行:
具体来说,仅当我的源代码文件夹中的文件发生更改时。这部分似乎对我不起作用。我刚刚提交了一个功能分支,将新文件添加到存储库根目录的新文件夹中。我没有对源代码目录进行任何更改。但这项工作是在该分支提交上触发的。谁能解释一下为什么吗?
已经几个月了,所以我不记得我从哪里得到这个规则块,但它是通过我在这里所做的研究得知的。我并不认为它会影响我当前的问题(在没有更改源代码的情况下运行),但我开始认为最后一个项目符号应该移到顶部。如果规则按顺序评估,我想首先排除 MR 打开时的分支提交。
是的,规则是按照规范中写入的顺序从顶部开始评估的。如何避免意外是从最具体的规则开始,然后继续使用更通用的规则。
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
changes:
- src/**/*
- if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS
when: never
- if: $CI_COMMIT_BRANCH
changes:
- src/**/*
但是,即使使用您的规则定义,也不应该启动作业,除非您打开了 MR 并且 MR 中的任何先前提交都已更改为
src/**/*
,因为在 MR 管道中,差异是针对目标分支生成的,而不是针对先前的分支在源分支中提交。