[英]How to access variables in gitlab-ci.yml using gitlab-ci-multi-runner on windows
[英]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 预定义变量,但找不到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:
- export
- pytest test/integration
这个技巧[借自 github 问题似乎解决了这个问题=(https://github.com/moby/moby/issues/4830#issuecomment-264366876):
啊,派对迟到了,我搜索,看到了这个,并意识到如果你想要一个“相对”的路径,你可以这样做:
docker run -v `pwd`/contrib:/tmp/contrib...
如果您从 shell 脚本运行,这很好,您将从某个地方运行它,非常适合本地开发,当您站立一些图像并希望将这些文件夹放在手边时。
所以我的命令是:
docker run --rm -t -v `pwd`/frontend:/app snyk/snyk:node
哪个正确扩展了pwd
。 这仅适用于 Linux 跑步者,不适用于 windows。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.