【问题标题】:how to check for file changes in GitLab CI, but only if merging into default branch?如何检查 GitLab CI 中的文件更改,但前提是合并到默认分支?
【发布时间】:2021-10-25 15:07:16
【问题描述】:

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

【问题讨论】:

    标签: gitlab gitlab-ci rules


    【解决方案1】:

    根据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 条件通过,则将作业添加到管道中。否则,它[明确地]不是。

    【讨论】:

    • 非常好,when: never 对应于我正在寻找的 else。这是完美的,谢谢!
    • 注意rules关键字,多个子句只被解释为逻辑或,无论是多个if,一个单独的when子句,等等,它被解释为@ 987654333@。获得逻辑 AND 的唯一方法是使用相同的条件,就像在您的示例中一样。
    • 就是这么简单的解释,谢谢! - X ⏎ Y 是 AND,- X ⏎ - Y 是 OR,太棒了!
    猜你喜欢
    • 2016-12-19
    • 2015-09-08
    • 1970-01-01
    • 2021-12-24
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    相关资源
    最近更新 更多