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

GitLab CI changes规则不生效:指定目录变更未触发流水线

问题分析与解决方案

核心问题1:changes规则不支持自定义变量

GitLab CI在解析rules:changes时,无法正确解析自定义变量(如$SUBDIR),因为该规则在流水线初始化阶段就会被评估,此时自定义变量的替换逻辑还未执行,导致路径匹配失效,流水线无法触发。

核心问题2:构建产物未被Git追踪(潜在情况)

如果./$SUBDIR/dist/下的文件是构建生成的临时产物,且未被提交到Git仓库,changes规则也无法检测到变更——因为该规则仅基于Git提交的文件差异进行判断。


解决方案

方案1:直接使用实际路径替换变量

将changes中的路径替换为$SUBDIR对应的实际值,让GitLab能直接匹配路径:

variables:
  SUBDIR: 'fasd/05_FASD_EX/interrupts/fasd'

stages:
  - deploy-test

deploy-test:
  stage: deploy-test
  image:
    name: amazon/aws-cli:latest
    entrypoint:
      - '/usr/bin/env'
  id_tokens:
    ID_TOKEN:
      aud: react_s3_jm
  script:
    - aws s3 sync ./$SUBDIR/dist s3://fpc-courses-test/$SUBDIR/dist --delete
  rules:
    - if: '$CI_COMMIT_REF_NAME == "test"'
      changes:
        - ./fasd/05_FASD_EX/interrupts/fasd/dist/**/*
      when: always

方案2:保留变量灵活性(动态路径场景)

如果必须使用变量,可通过在script中手动判断文件变更(此方式仍会触发流水线,仅跳过同步步骤):

variables:
  SUBDIR: 'fasd/05_FASD_EX/interrupts/fasd'

stages:
  - deploy-test

deploy-test:
  stage: deploy-test
  image:
    name: amazon/aws-cli:latest
    entrypoint:
      - '/usr/bin/env'
  id_tokens:
    ID_TOKEN:
      aud: react_s3_jm
  script:
    # 检查当前提交是否有dist目录下的文件变更
    - if git diff --name-only HEAD~1 HEAD | grep -q "^$SUBDIR/dist/"; then
        aws s3 sync ./$SUBDIR/dist s3://fpc-courses-test/$SUBDIR/dist --delete;
      else
        echo "No changes in dist directory, skipping sync";
      fi
  rules:
    - if: '$CI_COMMIT_REF_NAME == "test"'
      when: always

补充:确保dist文件被Git追踪(若适用)

如果dist目录是需要长期追踪的文件,可将其加入Git仓库(从.gitignore中移除相关规则),这样changes规则就能正常检测到变更。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:22:39