繁体   English   中英

gitlab CI 规则中不遵守 CI_PROJECT_DIR

[英]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_DIRrules中没有得到尊重?

尝试将表达式用引号括起来。 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_IDCI_PROJECT_URLCI_PROJECT_PATH_SLUG或类似变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM