jenkins / docker与环境变量

时间:2016-04-01 22:59:49

标签: jenkins docker dockerfile

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

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

我尝试过的事情:

  • 在jenkins配置页面的“docker template”部分中,我在“环境”字段中添加了“FOO = 1”。但是,当我点击“保存”时,不会保存此更改。

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

    • RUN echo“export FOO = 1”>>的/ etc /简档

    • ENV FOO 1

    • 运行回声导出FOO = 1>>的〜/ .bashrc

  • EnvInject Plugin。这有效,但需要您检查每个jenkins计划中的复选框。我希望有一个解决方案,我只需要做一次。

参考文献:

  • Jenkins bug。您无法在Jenkins环境中设置FOO并期望将其传递到docker容器。

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

  • Passing env through ssh。这解释了如何修改ssh调用以传递env变量,但我不知道如何在jenkins中访问该部分命令。 (注意,在命令行上公开变量很好。)

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

1 个答案:

答案 0 :(得分:1)

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

RUN env | grep _ >> /etc/environment

EXPOSE 22

USER jenkins

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