我有一个使用Perforce插件的参数化作业,并希望检索构建参数/属性以及Perforce插件设置的p4.change属性 .
如何使用Jenkins Groovy API检索这些属性?
关于参数:
See this answer first . 获取项目的所有构建的列表(根据该答案获得):
project.builds
当您找到特定的构建时,需要使用build.getActions(hudson.model.ParametersAction)获取ParametersAction类型的所有操作 . 然后,您可以在返回的对象中查询特定参数 .
关于p4.change:我怀疑它也存储为一个动作 . 在Jenkins Groovy控制台中获取包含p4.change的构建的所有操作并检查它们 - 它将让您知道在代码中要查找的内容 .
请注意官方Jenkins Wiki页面也会详细介绍这一点:https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+System+Groovy+script重要部分转载如下:
// get parameters def parameters = build?.actions.find{ it instanceof ParametersAction }?.parameters parameters.each { println "parameter ${it.name}:" println it.dump() } // ... or if you want the parameter by name ... def hardcoded_param = "FOOBAR" def resolver = build.buildVariableResolver def hardcoded_param_value = resolver.resolve(hardcoded_param)
为了解决单个参数(我想最常需要的),这是我发现的最简单的:
build.buildVariableResolver.resolve(“myparameter”)
在Groovy System脚本构建步骤中 .
我刚刚使用了Groovy Postbuild插件,你可以做到以下几点:
def paramText def actionList = manager.build.getActions(hudson.model.ParametersAction) if (actionList.size() != 0) { def pA = actionList.get(0) paramText = pA.createVariableResolver(manager.build).resolve("MY_PARAM_NAME") }
如果参数名称无法硬编码,我发现这将是访问参数的最简单和最好的方法:
def myParam = env.getProperty(dynamicParamName)
在某些情况下,当参数名称已知且可以硬编码时,以下3行是等效的:
def myParam = env.getProperty("myParamName") def myParam = env.myParamName def myParam = myParamName
System.getenv().each{ println it }
或更复杂:
def myvariables = getBinding().getVariables() for (v in myvariables) { echo "${v} " + myvariables.get(v) }
两者都需要 disable "Use Groovy Sandbox" .
要从GroovyScript(使用Pipeline)获取当前构建的参数化构建参数,您需要做的就是:假设您有一个名为VARNAME的变量 .
def myVariable = env.VARNAME
7 回答
关于参数:
See this answer first . 获取项目的所有构建的列表(根据该答案获得):
当您找到特定的构建时,需要使用build.getActions(hudson.model.ParametersAction)获取ParametersAction类型的所有操作 . 然后,您可以在返回的对象中查询特定参数 .
关于p4.change:我怀疑它也存储为一个动作 . 在Jenkins Groovy控制台中获取包含p4.change的构建的所有操作并检查它们 - 它将让您知道在代码中要查找的内容 .
请注意官方Jenkins Wiki页面也会详细介绍这一点:https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+System+Groovy+script重要部分转载如下:
为了解决单个参数(我想最常需要的),这是我发现的最简单的:
在Groovy System脚本构建步骤中 .
我刚刚使用了Groovy Postbuild插件,你可以做到以下几点:
如果参数名称无法硬编码,我发现这将是访问参数的最简单和最好的方法:
在某些情况下,当参数名称已知且可以硬编码时,以下3行是等效的:
获取所有参数:
或更复杂:
两者都需要 disable "Use Groovy Sandbox" .
要从GroovyScript(使用Pipeline)获取当前构建的参数化构建参数,您需要做的就是:假设您有一个名为VARNAME的变量 .
def myVariable = env.VARNAME