在因为忘记更改版本号而不得不手动更新我的存储库之后......两次,我决定是时候使用一些 CI 魔法了。
事情是这样的:如果我向 main
发出合并请求,我希望应用程序版本号在 3 个不同的文件中发生变化。
到目前为止,这是我的代码:
stages:
- test
- deploy
workflow:
# some rules
unit_test:
stage: test
script:
# run UT
# This is the part the question is about
check_version:
stage: test
rules:
- if: '$CI_PIPELINE_SOURCE' == "merge_request_event" && '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME' == '$CI_DEFAULT_BRANCH'
changes:
- composer.json
- resources/index.php
- Doxyfile
deploy:
stage: deploy
script:
# deployment script
rules:
- if: '$CI_COMMIT_BRANCH' == '$CI_DEFAULT_BRANCH'
如果我理解正确,我所做的是“如果它是一个合并到 main
中的请求,检查 composer.json
、resources/index 中的更改.php
和 Doxyfile
”。
首先:它是正确的吗?
其次:如何在其他分支允许推送和合并请求? “if”之后是否有某种“else”?
最佳答案
根据documentation for the rules
keyword ,根据您想要的描述,您拥有它的方式是正确的。如果为 Push 事件、不同的分支运行管道,或者如果这三个文件没有包含任何更改,则 check_version
作业将不会添加到管道中(您甚至看不到它在管道图中),所有其他作业将根据它们自己的 rules
子句(如果有)或显式 when
子句运行。
但是,在您的项目上工作的其他人可能会发现这种方式令人困惑,所以我个人总是在这些情况下添加明确的 when:never
:
...
check_version:
stage: test
rules:
- if: '$CI_PIPELINE_SOURCE' == "merge_request_event" && '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME' == '$CI_DEFAULT_BRANCH'
changes:
- composer.json
- resources/index.php
- Doxyfile
- when: never
...
这将得到与您在问题中的示例相同的结果,但我认为更清楚。在推送/合并请求/触发器/等期间对其进行评估时。事件,如果 if
条件通过,则将作业添加到管道中。否则,它 [明确地] 不是。
关于gitlab - 如何检查 GitLab CI 中的文件更改,但前提是合并到默认分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68923535/