gitlab - 如何检查 GitLab CI 中的文件更改,但前提是合并到默认分支?

标签 gitlab gitlab-ci rules

在因为忘记更改版本号而不得不手动更新我的存储库之后......两次,我决定是时候使用一些 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.jsonresources/index 中的更改.phpDoxyfile”。

首先:它是正确的吗?

其次:如何在其他分支允许推送和合并请求? “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/

相关文章:

GitLab CI/CD - 在我自己的主机上使用 Runner 时管道卡住

css - 将多个类合并为一个 css 规则

apache - Apache Proxy 背后的 Gitlab

docker - "aaaaa"存储库不存在或可能需要 'docker login' 的拉取访问被拒绝

docker - 删除现有的 docker 容器/图像 GitLab CI

ruby-on-rails - Gitlab CI : Is it possible to speed up 'bundle install' ?

gitlab-ci - gitlab runner 不适用于特定项目

CSS 规则覆盖 :not

android - 允许除一个 child 以外的所有 child 读写

ubuntu - Jenkins 在 'git pull' 上失败