我刚刚注意到,在PWD
下访问script
变量时,它可以像人们期望的那样工作,例如:
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}"
,这也会导致错误。
答案 0 :(得分:0)
在定义变量时,可以尝试使用Circle()
。然后,GitLab不应尝试解释变量,而应将字符串$$PWD
存储在变量docker run --rm -v $PWD:/wd
中。如您所写,GitLab在解析.gitlab-ci.yml文件时尝试解释变量DOCKER_RUN
。这是在git服务器上完成的,在这种情况下,当前的工作目录没有意义。
当您在作业中使用$PWD
时,它会在gitlab-runner上作为普通的shell脚本执行。这样,当前的工作目录就很合理了!