使用 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
我刚刚注意到,当在 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