【问题标题】:How can I use passwords injected in the build as environment variables in Active Choices Parameter如何使用在构建中注入的密码作为 Active Choices 参数中的环境变量
【发布时间】:2016-04-23 17:44:38
【问题描述】:

我在构建配置部分中定义了密码,标题为“将密码作为环境变量注入构建”:

我想在我的 Active Choices 中使用 MYVAR(未加密值)。不幸的是,它不起作用。对 MYVAR 的引用失败。

在下面的示例中,为了进行测试,我只是尝试显示 MYVAR 的值作为选择。您可以看到它失败了,而是使用了备用活动选择脚本。

最终,我想使用此变量对服务进行身份验证以构建选择列表,但我什至无法在我的脚本中引用它。我被卡住了。

当我尝试“使用参数构建”时:

提前感谢您的帮助!

【问题讨论】:

  • 你所说的“它不工作到底是什么意思?任何错误、意外输出等?”你所说的“_can't find a way to在我的 groovy 脚本中引用 MYVAR 值_"?您是否已经尝试在脚本中登录您的服务?您的问题中没有这样的代码。
  • 感谢您的回复!我编辑了帖子。你可以看到它没有使用脚本,而是使用回退意味着分配失败。

标签: jenkins groovy passwords jenkins-plugins


【解决方案1】:

我认为这行不通。为什么?好吧,EnvInject Plugin 的 Build Environment 选项如下:

在构建过程中注入环境变量

和

将密码作为环境变量注入构建

Active Choices Plugin 生效时,构建尚未开始,因此注入尚未发生。

【讨论】:

  • +1 给 Gerold Broser。插件填充参数时还没有构建。它可以引用 Jenkins 配置页面中的其他字段,因此理论上它可能可以引用 eninject 构建配置,但这将是一个增强建议(而且不是一个简单的建议,并且可能没有意义引用不是每个参数的字段se)
【解决方案2】:

受@Bruno's 评论的启发,我开发了以下要输入的内容:

  • ☑ 此构建已参数化
    • 主动选择参数
      • 脚本
        • ◉ Groovy 脚本
          • 脚本

// From: How can i use passwords injected in the build as environment variables in Active Choices Parameter Groovy Script
//       https://stackoverflow.com/a/36821693/1744774

import static java.lang.System.out
import static java.lang.System.err

import hudson.model.Project

import org.w3c.dom.*;
import javax.xml.parsers.*
import javax.xml.xpath.*

// -----------------------------------------------------------
// Adapt these according to your environment
final String JENKINS_HOME = '< your Jenkins home >'
final String THIS_JOB_NAME = '< your job name >'
// -----------------------------------------------------------

//try (final PrintStream LOG = new PrintStream("${JENKINS_HOME}/jobs/${THIS_JOB_NAME}/activechoices.log")) { // doesn't work
final PrintStream LOG = new PrintStream("${JENKINS_HOME}/jobs/${THIS_JOB_NAME}/activechoices.log")

try {
  System.setOut(LOG)
  System.setErr(LOG)
  out.println("${JENKINS_HOME}/jobs/${THIS_JOB_NAME}/job.log")

  // groovy.lang.MissingPropertyException: No such property: Jenkins for class: Script1
  //final Project THIS_JOB = Jenkins.instance.getItem(THIS_JOB_NAME)
  //final String THIS_JOB_CONFIG = THIS_JOB.getRootDir().getPath() + '/config.xml'

  // static path to job config since the above doesn't work
  final String THIS_JOB_CONFIG = "${JENKINS_HOME}/jobs/${THIS_JOB_NAME}/config.xml"
  out.println(THIS_JOB_CONFIG)

  final Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(THIS_JOB_CONFIG)

  final XPathExpression stringExpr = XPathFactory.newInstance().newXPath()
      .compile("//hudson.model.StringParameterDefinition/defaultValue/text()")
  final String STRING_PARAMETER = stringExpr.evaluate(doc, XPathConstants.NODE).getNodeValue()

  final XPathExpression pwdExpr = XPathFactory.newInstance().newXPath()
      .compile("//hudson.model.PasswordParameterDefinition/defaultValue/text()")
  final String PASSWORD_PARAMETER = pwdExpr.evaluate(doc, XPathConstants.NODE).getNodeValue()

  final List parameters = new ArrayList()
  parameters.add('static')
  parameters.add(THIS_JOB_NAME)
  //parameters.add(THIS_JOB)
  parameters.add(STRING_PARAMETER)
  parameters.add(PASSWORD_PARAMETER)
  return parameters
  }
catch (Exception e) {
  e.printStackTrace()
  }
finally {
  LOG.close()
  }

问题:

  • 为什么try-with-resources 不起作用?
  • 如何获取 Jenkins 实例?

工作的config.xml

  <properties>
    ...
    <hudson.model.ParametersDefinitionProperty>
      <parameterDefinitions>
        ...
        <hudson.model.PasswordParameterDefinition>
          <name>Password Parameter</name>
          <description>This is a Password Parameter.</description>
          <defaultValue>q2sZWfVMgQNyIi/pjY6yaE7DT9zRvnPv1mBcbydjlMQ=</defaultValue>
        </hudson.model.PasswordParameterDefinition>
        <hudson.model.StringParameterDefinition>
          <name>String Parameter</name>
          <description>This is a String Parameter.</description>
          <defaultValue>string value</defaultValue>
        </hudson.model.StringParameterDefinition>
        <hudson.model.StringParameterDefinition>
          <name>Another String Parameter</name>
          <description>This is another String Parameter.</description>
          <defaultValue>another string value</defaultValue>
        </hudson.model.StringParameterDefinition>
      </parameterDefinitions>
    </hudson.model.ParametersDefinitionProperty>
  </properties>

使用参数构建

在使用XPathExpression.evaluate(...,XPathConstants.NODESET) 时,如果有多个相同类型的参数,我将它留给读者迭代Nodes。

【讨论】:

  • 哇,谢谢。非常棒,也很鼓舞人心。我要坐下来试一试。期待它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-21
  • 2014-02-06
  • 2019-09-02
  • 1970-01-01
  • 1970-01-01
  • 2017-08-07
相关资源
最近更新 更多