【问题标题】:Pass file content as build argument in azure devops pipeline docker build task在 azure devops 管道 docker build 任务中将文件内容作为构建参数传递
【发布时间】:2020-02-29 08:42:44
【问题描述】:

我想使用 --build-arg 在 docker build 命令中将我的文件内容作为构建参数传递。我在终端中使用以下命令,它工作正常

docker build -t 示例 --build-arg PRIVATE_KEY="$(cat /home/key)" .

但是当我在 azure devops 管道 docker build 任务中尝试相同的事情并在参数框中传递 --build-arg PRIVATE_KEY="$(cat /home/key)" 时,它会采用原来的值,即 $(cat /home/key) 并且不执行 cat 命令。

【问题讨论】:

    标签: bash azure shell docker azure-devops


    【解决方案1】:

    我认为这不是 docker build 任务的问题。它适用于命令行任务的原因可能是因为当您在本地计算机或命令行任务中运行 docker build 命令时,命令行首先会评估“$()”中包含的内容,然后值为传递给码头工人ARG。但是对于docker build任务,它直接调用docker.exe,导致“$()”中的表达式无法被求值。

    既然您已经找到了使用命令行任务的解决方法。我建议你使用命令行任务而不是 docker 任务。

    我也尝试了@4c74356b41 的建议。我定义了一个管道变量key,并将key的值放入这个变量中,并在docker build task中引用这个变量。

    当我将--build-arg PRIVATE_KEY="$(key)" 放入“参数”框中时,我在下面为我工作。

    • 变量

    • Docker 构建任务

    【讨论】:

      【解决方案2】:

      您需要将此值放入变量中并引用变量,或者使用脚本步骤从文件内容中创建变量并引用变量。

      另一种方法是将密钥作为上下文传递给 docker build,并在构建中提取该值

      【讨论】:

      • 不能在 azure devops 管道中工作。我正在传递 --build-arg PRIVATE_KEY="$Key" 但不是取 Key 变量的值,而是 PRIVATE_KEY 值是 $Key
      • --build-arg PRIVATE_KEY=$(key),这工作正常,但在这种情况下,它会抛出错误错误标志语法:-----END 因为我的密钥变量包含 SSH 私钥
      • --buld-arg PRIVATE_KEY="$(key)"
      • 我也使用过,但在这种情况下,它将 PRIVATE_KEY 值设置为 $(key)
      • 我发现的工作是使用命令行步骤而不是 docker build 步骤,然后在命令行步骤中使用命令作为docker build -t example --build-arg PRIVATE_KEY="$(cat /home/key)" .
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-24
      • 1970-01-01
      • 1970-01-01
      • 2021-04-30
      • 2021-02-23
      • 2021-08-09
      • 1970-01-01
      相关资源
      最近更新 更多