【问题标题】:How to use `inject-passwords` in Jenkins job Builder?如何在 Jenkins job Builder 中使用“inject-passwords”?
【发布时间】:2019-09-12 17:03:31
【问题描述】:

我正在使用yaml 文件来配置jenkins 作业,并且遇到了inject-passwords 功能(请参阅here)。但是,该文档既没有描述如何在 jenkins 环境中使用该变量,也没有描述“加密”密码的含义(如何加密?)。指向EnvInjectPlugin 的链接也没有所需的信息。

在哪里可以找到有用的信息/文档?为什么这个文档如此不完整?

上下文:

我想以安全的方式将密码注入到 jenkins 作业中。在这个詹金斯工作中,我想使用这个密码作为登录在线服务的密码,以便测试该服务的几个方面。我需要测试脚本来获取密码(环境变量?)才能登录服务。

参考文档中未回答的未解决问题:

  • Name of password(here)是环境变量名的信息在哪里?
  • 如何加密密码的信息在哪里:password (str) Encrypted password(见here

【问题讨论】:

  • 如文档中所述,注入密码将作为环境变量提供。所以你可以简单地用 $name 来引用它。
  • 您能否详细说明您要达到的目标?
  • 我想以安全的方式将密码注入到 jenkins 工作中。在这个詹金斯工作中,我想使用这个密码作为登录在线服务的密码,以便测试该服务的几个方面。我需要测试脚本来获取该密码(环境变量?)才能登录服务。

标签: jenkins yaml jenkins-job-builder


【解决方案1】:

密码注入的文档不可用。因此,我在这里提供了一个完整的例子。

首先,你需要得到加密的密码。

  1. 转到可以安全修改的 Jenkins 作业的配置部分。例如您当前尝试设置的那个。
  2. 在“构建环境”部分,单击“将密码注入构建作为环境变量”。
  3. 使用虚拟变量名写入您的纯密码并保存配置。此步骤将在后台加密密码。
  4. 转到作业的“作业配置历史”选项卡,查看最新的 RAW XML 配置文件。您将在 XML 中找到可以复制以用于下一步的加密密码。

第二步,需要将密码放入yaml文件如下:

wrappers:
     - inject-passwords:
        global: true
        mask-password-params: true
        job-passwords:
            - name: TEST_USER_PASSWORD
              password: '{AQAAABAAAAAQvsFFVkOmzr5WzEhX8OWuK7mizr5xzEhX8lGo2AGMVw8=}'
            - name: TEST_USER_PASSWORD2
              password: '{AQAAABAAAAAQvsFFVkOmzr5xzEhX8lGo2AcPGMVw8b8SflGo2AcPGMVw8=}'

注意:密码用引号和大括号括起来。

第三步:在jenkins中可以使用环境变量TEST_USER_PASSWORDTEST_USER_PASSWORD2。这些变量将包含 decrypted 密码,但是当您将它们打印出来时,jenkins 会注意到日志中有一个密码,jenkins 会对其进行混淆。

例子:

实际输出

My password is jddfdjh44y98dyghsdgdgfdg

Jenkins 日志输出

My password is [********]

您可以逐步打印变量的内容以获取密码(以检查它是否有效)。

【讨论】:

    【解决方案2】:

    在文档中,作者解释说插件“将密码作为环境变量注入构建”,因此,正如 Alexandre Cartapanis 所指出的,可以通过名称 ($password_name) 作为环境变量进行访问。此信息分布在两个站点中:在 YAML 文档中,他们说“将密码作为环境变量注入构建。需要 Jenkins EnvInject 插件”,EnvInject 插件页面指出“共享对象插件有助于 Envinject 插件,使您能够将共享对象填充为环境变量”。在这篇文章中,您可能会发现 an example 尝试通过变量名称访问变量 - 这仅在构建时可用。

    存储时,Jenkins makes sure passwords are encrypted。据我了解,将被解密只是为了在作业需要的地方作为变量传递 - 就像使用任何凭据一样。

    关于 EnvInject 插件如何工作的一些附加信息在指向其他相关插件的链接上提供,例如 Shared Objects plugin

    只要您只是将密码用作环境变量并且不记录其值,就可以安全地使用它。使用相同的方法或通过引用密码的 ID,例如:在 Jenkins 管道中访问 SCM 凭据。

    【讨论】:

    • 那是在哪个文档中写的?我找不到那个。另外,我在任何地方都找不到有关如何加密密码的说明!请再次阅读我的问题。
    • 刚刚编辑了上面的答案,提供了更多细节。
    • 感谢您的更新 - 我想我们都同意文档不足。在可用性方面 - 当我尝试从詹金斯中打印出密码时,我得到的只是'[******]'。如何处理?我需要明文形式的密码,以便可以将其放入某些网站的盒子中进行测试?怎么做?如我的问题所述,我需要登录某些服务。但是到目前为止我还没有密码...
    • 如果你能提供一个简单、完整和有效的例子就更好了。并让我知道与谁联系以完成文档。
    • 我发现当字符串与密码匹配时,jenkins 本身似乎会混淆其日志中的任何位置。但是,当逐个字符打印出变量的内容时,我又得到了加密的密码!我必须自己解密吗?
    猜你喜欢
    • 1970-01-01
    • 2019-05-02
    • 2022-11-12
    • 1970-01-01
    • 1970-01-01
    • 2017-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多