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
相关产品推荐
相关产品推荐

