GitLab Pipeline未遵循文件变更触发规则问题求助
问题原因
GitLab CI 的 rules:changes 配置是在流水线初始化的配置解析阶段处理的,而你在 build-job 内部定义的 variables 要到job执行阶段才会生效。这就导致解析 rules:changes 时,$Setup_DIR 变量还未被赋值,CI 会把它当作字面量路径处理,无法匹配到实际的 service/new/boot.sh 文件,最终触发默认行为——每次提交都运行该job。
解决方案
有两种可行的修改方式:
方式1:直接写死路径(最简单)
去掉job内的变量,直接在 rules:changes 中指定实际路径:
build-job: stage: build script: - echo "Boot file has been changed from test pipeline again " rules: changes: paths: - service/new/boot.sh
方式2:使用全局变量(保留变量复用)
如果需要复用路径变量,把变量定义在全局作用域(job外部),这样解析 rules 时变量已经存在:
variables: Setup_DIR: 'service/new/boot.sh' build-job: stage: build script: - echo "Boot file has been changed from test pipeline again " rules: changes: paths: - $Setup_DIR
额外说明
如果创建新分支时仍不想触发流水线,可以在 rules 中添加额外条件排除分支创建场景:
rules: - changes: paths: - service/new/boot.sh if: $CI_PIPELINE_SOURCE != "web" && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
(可根据实际需求调整条件,比如排除首次分支推送的情况)
内容的提问来源于stack exchange,提问作者Tosinosu
相关产品推荐
相关产品推荐

