Gitlab CI 规则:我预计只有在源代码文件发生更改时才会运行

问题描述 投票:0回答:1

我的

.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

我期望它只在两种情况下运行:

  1. 对开放合并请求所做的任何提交
  2. 对分支的任何提交,但前提是 MR 尚未打开(试图避免重复运行)

具体来说,仅当我的源代码文件夹中的文件发生更改时。这部分似乎对我不起作用。我刚刚提交了一个功能分支,将新文件添加到存储库根目录的新文件夹中。我没有对源代码目录进行任何更改。但这项工作是在该分支提交上触发的。谁能解释一下为什么吗?

已经几个月了,所以我不记得我从哪里得到这个规则块,但它是通过我在这里所做的研究得知的。我并不认为它会影响我当前的问题(在没有更改源代码的情况下运行),但我开始认为最后一个项目符号应该移到顶部。如果规则按顺序评估,我想首先排除 MR 打开时的分支提交。

gitlab-ci
1个回答
0
投票

是的,规则是按照规范中写入的顺序从顶部开始评估的。如何避免意外是从最具体的规则开始,然后继续使用更通用的规则。

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 管道中,差异是针对目标分支生成的,而不是针对先前的分支在源分支中提交。

© www.soinside.com 2019 - 2024. All rights reserved.