如何在Jenkins Job Builder中使用`inject-passwords`?

时间:2019-04-23 13:32:07

标签: jenkins yaml jenkins-job-builder

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

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

上下文:

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

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

  • 哪里有inject-passwordshere)是环境变量名称的信息?
  • 有关如何加密密码的信息在哪里:Name of password(请参阅here

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:1)

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

首先,您需要获取加密的密码。

  1. 转到可以安全修改的Jenkins Job的配置部分。例如,您当前正在尝试设置的那个。
  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=}'

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

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

示例:

实际输出

My password is jddfdjh44y98dyghsdgdgfdg

Jenkins日志输出

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

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