如何检查 GitLab CI 中的文件更改,但前提是合并到默认分支?
how to check for file changes in GitLab CI, but only if merging into default branch?
因为我忘记更改版本号而不得不手动更新我的存储库之后...两次,我决定是时候使用一些 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
...
这将得到与您问题中的示例相同的结果,但我认为更清楚。在 push/merge request/trigger/etc 期间对其进行评估时。事件,如果 if
条件通过,作业将添加到管道中。否则,它 [明确地] 不是。
因为我忘记更改版本号而不得不手动更新我的存储库之后...两次,我决定是时候使用一些 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
...
这将得到与您问题中的示例相同的结果,但我认为更清楚。在 push/merge request/trigger/etc 期间对其进行评估时。事件,如果 if
条件通过,作业将添加到管道中。否则,它 [明确地] 不是。