【问题标题】:How to pass Jenkins credentials to a Dockerfile/Shell?如何将 Jenkins 凭据传递给 Dockerfile/Shell?
【发布时间】:2019-02-02 01:59:44
【问题描述】:

我有一个 Makefile:

docker build --build-arg USER=${USER} --build-arg PASSWD=${PASSWD}

我在 jenkins 脚本中构建它:

withCredentials([usernamePassword(credentialsId: 'my-credentials', passwordVariable: 'PASSWD', usernameVariable: 'USER')]) { (build_step) }

在 Dockerfile 脚本中,我有:

ARG USER

ARG PASSWD 

curl -u ${USER}:${PASSWD}

其中 USER/PASSWD 对被传递到 repo/API。

正确传递 USER / PASSWD 的必要步骤是什么?我尝试了很多解决方案/语法选项和 RUN 导出。似乎没有任何工作。

有没有办法从 dockerfile 运行 echo 变量? Jenkins 日志在大多数尝试中显示变量名称或空格。

【问题讨论】:

  • 解决方法:删除了 Makefile / withCredidentials 步骤。 curl 步骤中的凭据已替换为默认的公共 REST api 用户的凭据。
  • 可能的解决方案/无效的问题陈述:我在 ARG 之后有一条 FROM 指令。如果在 FROM 之后替换了 ARG,则代码可能正在运行。基于:github.com/moby/moby/issues/34129“基本上,在 FROM 指令之后,所有构建参数都被重置,因此在 Dockerfile 中不可用。”

标签: shell docker jenkins arguments credentials


【解决方案1】:

您可以使用 --build-arg 将参数传递给 dockerile。所以在这种情况下,你可以运行类似docker build --build-arg USER=${USER} --build-arg PASSWD=${PASSWD}

【讨论】:

  • 构建步骤是'make -C my_dir build id=$id',其中id是在jenkins环境中定义的。 Makefile 不是已经传递了这些参数吗(请参阅:第一行代码)?从控制台输出看来,这一步正在执行,因为 jenkins 凭据被 **** (--build-arg USER=**** --build-arg PASSWD=****) 隐藏,但是进一步调查显示它们是空的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-31
  • 1970-01-01
  • 1970-01-01
  • 2022-01-06
  • 2016-03-19
  • 2019-04-07
  • 1970-01-01
相关资源
最近更新 更多