簡體   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