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

GitLab CI规则中CI_PROJECT_DIR变量未按预期生效问题

GitLab CI中CI_PROJECT_DIR在rules条件中不匹配的问题

问题场景

仓库名为test,编写了如下GitLab CI流水线配置:

image: alpine

stages:
  - test

this-does-not-run:
  stage: test
  rules:
    - if: $CI_PROJECT_DIR == "/builds/test"
  script:
    - echo "It works!"

this-runs:
  stage: test
  rules:
    - if: $CI_PROJECT_DIR != "/builds/test"
  script:
    - echo "It doesn't work! CI_PROJECT_DIR- $CI_PROJECT_DIR"

实际运行后输出始终为:

It doesn't work!  CI_PROJECT_DIR- /builds/test

明明CI_PROJECT_DIR的值是/builds/test,但预期触发的this-does-not-run job并未执行,反而执行了相反条件的job。

问题原因

GitLab CI的rules:if使用的是GitLab表达式语言,而非Shell语法,变量引用不需要加$符号。你在条件中写的$CI_PROJECT_DIR会被当作字符串字面量处理,而非解析为变量的值,因此"$CI_PROJECT_DIR"和"/builds/test"的比较结果为不相等,导致第一个job的条件不成立,第二个job的条件触发。

解决办法

修改rules:if中的变量引用方式,去掉$符号:

image: alpine

stages:
  - test

this-does-not-run:
  stage: test
  rules:
    - if: CI_PROJECT_DIR == "/builds/test"
  script:
    - echo "It works!"

this-runs:
  stage: test
  rules:
    - if: CI_PROJECT_DIR != "/builds/test"
  script:
    - echo "It doesn't work! CI_PROJECT_DIR- $CI_PROJECT_DIR"

修改后,this-does-not-run job会正确匹配CI_PROJECT_DIR的值,输出预期的It works!。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:20:32