[英]CI_PROJECT_DIR not respected in gitlab CI rules
考虑以下管道:
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"
并假设我的回购被称为test
。 此 CI 的 output 将始终为:
It doesn't work! CI_PROJECT_DIR- /builds/test
显然$CI_PROJECT_DIR == /builds/test
,所以我希望 output 能够It works!
. 我错过了什么,还是$CI_PROJECT_DIR
在rules
中没有得到尊重?
尝试将表达式用引号括起来。 Afaik 这是一个表达式,你需要包装它。
例如:
rules:
- if: '$CI_PROJECT_DIR == "/builds/test"'
如果您只有变量,那么根据经验,您不需要包装它。 例如:
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
这里的问题是rules:
中的变量必须在创建管道时由 GitLab 服务器扩展(评估),但$CI_PROJECT_DIR
由运行器的builds_dir
设置确定,该设置只有在运行时作业实际运行时运行器才知道:
对不可用变量的引用保持不变。 在这种情况下,运行程序会尝试在运行时扩展变量值。 例如,像 CI_BUILDS_DIR 这样的变量只有在运行时才为运行程序所知。
也就是说,像CI_BUILDS_DIR
一样,不能在rules:if:
中使用CI_PROJECT_DIR
或其他运行时变量。 相反,您应该使用 gitlab 服务器在管道创建时已知的变量,例如CI_PROJECT_NAME
CI_PROJECT_ID
、 CI_PROJECT_URL
、 CI_PROJECT_PATH_SLUG
或类似变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.