繁体   English   中英

使用 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 预定义变量,但找不到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.

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