使用 PWD 在 .gitlab-ci.yml 中定义变量时出错

Error using the PWD to define variables in .gitlab-ci.yml

我刚刚注意到,当在 script 下访问 PWD 变量时,它会像预期的那样工作,例如:

test:
    script:
    - docker run --rm -v $PWD/wd image [options]

但是 当上面的内容被包含$PWD 的变量替换时,这会失败。事实上,像下面这样的指令会导致错误:

variables:
    DOCKER_RUN: "docker run --rm -v $PWD:/wd"

test:
    script:
    - $DOCKER_RUN image [options]

这是因为变量 DOCKER_RUN 在这里被解释为 "docker run --rm -v :/wd"。也就是说,如果 PWD 是空的,我不明白为什么。

我也一直在探索 gitlab predefined variables 但找不到 PWD 的合适替代品,而不是通过组合它们,例如。使用 "${CI_BUILDS_DIR}/${CI_PROJECT_NAMESPACE}",这也会导致错误。

您可以尝试在定义变量时使用$$PWD。然后 GitLab 不应该尝试解释变量,而只是将字符串 docker run --rm -v $PWD:/wd 存储在变量 DOCKER_RUN 中。正如您所写的那样,GitLab 在解析 .gitlab-ci.yml 文件时会尝试解释变量 $PWD 。这是在 git 服务器上完成的,当前工作目录在此上下文中没有意义。

当您在作业中使用 $PWD 时,它会作为普通 shell 脚本在 gitlab-runner 上执行。那么当前工作目录就很有意义了!

我用了$CI_PROJECT_DIR

...

test:
  stage: test
  variables:
    PYTHONPATH: "$CI_PROJECT_DIR"
  script: 
    - pytest test/integration