【问题标题】:jenkins/docker with environment variables带有环境变量的詹金斯/码头工人
【发布时间】:2016-07-21 21:29:42
【问题描述】:

我正在尝试在 Jenkins 中使用 docker 机器,并让该机器设置了环境变量 (FOO)。我已经在我的 jenkins 配置中使用 docker 模板成功设置了一个图像。意思是,这可能不是我的问题点。问题是我似乎无法使环境变量可用。如果我创建一个只是尝试执行“echo $FOO”的 jenkins 项目,我得到的只是一个空行。

我的 Dockerfile 基于 ubuntu-14.04,以: CMD ["/usr/sbin/sshd", "-D"]

我尝试过的事情:

  • 在 jenkins 配置页面的“docker 模板”部分,我已将“FOO=1”添加到“环境”字段。但是,当我点击“保存”时,此更改并未保存。

  • 向 Dockerfile 添加各种设置 FOO 的方法:

    • 运行 echo "export FOO=1" >> /etc/profile

    • ENV FOO 1

    • 运行 echo export FOO=1 >> ~/.bashrc

  • EnvInject Plugin。这可行,但需要您选中每个詹金斯计划中的复选框。我希望有一个解决方案,我只需要做一次。

参考资料:

  • Jenkins bug。您不能在 Jenkins 环境中设置 FOO 并期望将其传递给 docker 容器。

  • Docker's advice。此页面建议(我认为)将 env 变量添加到 /etc/profile.正如我所提到的,这对我来说失败了。

  • Passing env through ssh。这解释了如何修改 ssh 调用以传递环境变量,但我不知道如何在 jenkins 中访问该部分命令。 (注意,在命令行上暴露变量是可以的。)

  • ssh set user env。这个答案似乎有点矫枉过正,我没有测试它是否有效。大概我会让 Dockerfile 添加 .ssh/environment 并且我必须启用 PermitUserEnvironment。

【问题讨论】:

  • 已经尝试将 --env-file 挂载到您的 jenkins 容器(当您启动容器时?)

标签: jenkins docker dockerfile


【解决方案1】:

我让 Jenkins 在 docker 容器中运行,我用它来运行其他容器。 Jenkins 通过 ssh 连接到容器以构建和 Android 应用程序,但环境变量总是被 ssh 清除。 我通过将环境变量写入 /etc/environment 解决了这个问题,然后它们会在登录时自动加载。 这是我的 dockerfile 的最后一步:

RUN env | grep _ >> /etc/environment

EXPOSE 22

USER jenkins

CMD ["/usr/sbin/sshd", "-D"]

【讨论】:

  • 我认为这不能回答问题。问题是当 Jenkins 登录时它会清除环境变量。
猜你喜欢
  • 2018-07-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-09
  • 2019-07-19
  • 1970-01-01
  • 2019-03-17
  • 2018-07-26
  • 2020-09-29
相关资源
最近更新 更多