我在构建配置部分中定义了密码“将构建密码注入环境变量”:
我想在我的主动选择中使用MYVAR(未加密的值)。不幸的是,它没有用。对MYVAR的引用失败了。
在下面的示例中,为了进行测试,我只是尝试将MYVAR的值显示为选项。您可以看到它失败,而是使用了回退活动选择脚本。
最终,我想使用此变量对服务进行身份验证,以构建一个选项列表,但无法在我的脚本中引用它。我被卡住了。
当我尝试“使用参数构建”时:
提前感谢您的帮助!
答案 0 :(得分:2)
我认为这不会起作用。为什么?好吧,EnvInject Plugin的构建环境选项读取:
将环境变量注入构建过程
和
将构建密码作为环境变量注入
当Active Choices Plugin发挥作用时,构建尚未开始,因此没有进行注射。
答案 1 :(得分:1)
受到@Bruno's评论的启发,我开发了以下内容:
// 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
不起作用?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>
在使用Node (...,
XPathExpression.evaluate
)
时,如果有多个{{}}},我会将此作为挑战让读者重复XPathConstants.NODESET
秒相同类型的参数。