【问题标题】:Passing Masked Jenkins Environment Variable to Docker container将 Masked Jenkins 环境变量传递给 Docker 容器
【发布时间】:2016-12-08 01:08:32
【问题描述】:

我在我的 Jenkins 构建中设置了一个密码参数,其中包含一些我想保密的信息。 Jenkins 构建将创建一个需要访问此参数的 Docker 容器。目前,我的命令如下所示:

docker run -e PASSWORD=${PASSWORD} my_image my_command

这按我的预期工作——我在构建中设置的 PASSWORD 参数作为环境变量传递给 Docker 容器,然后可以使用它。这是我的控制台输出的一部分:

+ docker run -e PASSWORD=abc123efg my_image my_command

问题是原始密码显示在上面的输出中。是否有任何解决方法或替代解决方案可用于将屏蔽参数传递给我的容器而不将其暴露在输出中?

【问题讨论】:

    标签: bash jenkins docker environment-variables


    【解决方案1】:

    有很多插件可以屏蔽控制台输出中的特定参数如https://wiki.jenkins-ci.org/display/JENKINS/Mask+Passwords+Plugin

    【讨论】:

    • 是的,似乎我们已经安装了该插件,但我没有使用它,而是使用了我认为是参数化构建插件的 Masked Password 选项(似乎不起作用)。我就把这个设置为答案,然后收工
    【解决方案2】:

    以明文形式传递敏感信息恕我直言,即使被屏蔽也不是一个好的选择。如果您控制构建管道,那么使用共享密钥方法可能是一个更强大的选择。它的实施相对简单并且有据可查。从快速的谷歌搜索中,我会选择http://bigthinkingapplied.com/key-based-encryption-using-openssl/,这很好地解释了它。简而言之……

    • 创建一个随机文件(“共享密钥”)并使其在您的构建系统以及 docker 容器中可用
    • 使用共享密钥加密密码
    • 将加密密码传递给 docker 容器
    • 在docker容器中,使用共享密钥解密密码

    【讨论】:

    • 如果我在 docker 容器和 Jenkins 之间已经有了一个共享密钥,我为什么要使用它来加密/解密任何其他密码?我可以只使用那个秘密而不是密码。当然,共享密钥允许您加密 Jenkins 和 docker 容器之间的通信,但如果我有任何基础设施来创建和维护此类密钥,为什么不首先使用它来传递密码呢?
    猜你喜欢
    • 2019-04-10
    • 2015-09-18
    • 2022-01-16
    • 2021-06-07
    • 2020-02-23
    • 2015-08-10
    • 2021-06-25
    • 2017-09-18
    相关资源
    最近更新 更多