You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置GitLab CI规则:仅单改README.md时跳过构建阶段

解决方案

要实现仅当推送只改了README.md时跳过构建阶段,其他情况(包括同时改README.md和其他文件)正常运行,得调整规则逻辑,精准判断修改的文件是不是只有README.md,而不是只要包含README.md就跳过。

方法一:用CI_COMMIT_CHANGES变量(GitLab 13.10及以上可用)

GitLab 13.10之后提供了CI_COMMIT_CHANGES内置变量,这个变量里是当前推送所有修改文件的列表,每行一个路径。我们可以直接判断这个变量的值是不是正好等于README.md:

stages:
  - A

Stage A:
  stage: A
  rules:
    # 只有当修改的文件仅为README.md时,跳过阶段
    - if: '$CI_COMMIT_CHANGES == "README.md"'
      when: never
    # 其他所有推送场景,正常运行阶段
    - when: always

方法二:兼容旧版GitLab的通用方案

如果你的GitLab版本低于13.10,没法用CI_COMMIT_CHANGES,可以在规则里通过git diff命令判断修改的文件集合:

stages:
  - A

Stage A:
  stage: A
  rules:
    - script:
        - |
          # 获取本次推送修改的文件列表
          CHANGED_FILES=$(git diff --name-only HEAD~1 HEAD)
          # 判断是否只有README.md被修改
          if [ "$CHANGED_FILES" = "README.md" ]; then
            exit 0  # 满足条件,触发when: never
          else
            exit 1  # 不满足条件,跳过这条规则
          fi
      when: never
    # 其他情况正常运行
    - when: always

注意点

  • 如果README.md不在仓库根目录,要对应调整路径(比如docs/README.md),确保和变量输出或命令获取的路径一致。
  • 要是需要匹配所有子目录下的README.md,可以把方法一的条件改成正则匹配:if: '$CI_COMMIT_CHANGES =~ /^README.md$/m'(m表示多行匹配)。

内容的提问来源于stack exchange,提问作者LWixson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 21:54:25