我有一个使用Perforce插件的参数化作业,并希望检索构建参数/属性以及Perforce插件设置的p4.change属性。
如何使用Jenkins Groovy API检索这些属性?
答案 0 :(得分:25)
请注意官方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)
答案 1 :(得分:24)
对于解析单个参数(我想最常需要的),这是我发现的最简单的参数:
build.buildVariableResolver.resolve( “myparameter”)
在Groovy System脚本构建步骤中。
答案 2 :(得分:17)
关于参数:
See this answer first。获取项目的所有构建列表(根据该答案获得):
project.builds
当您找到特定版本时,您需要使用ParametersAction获取build.getActions(hudson.model.ParametersAction)
类型的所有操作。然后,您可以在返回的对象中查询特定参数。
关于p4.change:我怀疑它也存储为动作。在Jenkins Groovy控制台中获取包含p4.change的构建的所有操作并检查它们 - 它将让您知道在代码中要查找的内容。
答案 3 :(得分:10)
我刚刚开始使用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")
}
答案 4 :(得分:3)
如果参数名称无法硬编码,我发现这是访问参数最简单,最好的方法:
def myParam = env.getProperty(dynamicParamName)
如果参数名称已知且可以硬编码,则以下3行是等效的:
def myParam = env.getProperty("myParamName")
def myParam = env.myParamName
def myParam = myParamName
答案 5 :(得分:2)
System.getenv().each{
println it
}
或更复杂:
def myvariables = getBinding().getVariables()
for (v in myvariables) {
echo "${v} " + myvariables.get(v)
}
您需要禁用“使用Groovy Sandbox”。
答案 6 :(得分:1)
要从GroovyScript(使用Pipeline)获取当前版本的参数化构建参数,您需要做的就是: 假设您有一个名为VARNAME的变量。
def myVariable = env.VARNAME
答案 7 :(得分:0)
如果您试图将所有参数传递给Jenkins作业,则可以在groovy管道中使用全局变量 params 来获取它。
http://jenkins_host:8080/pipeline-syntax/globals
参数
将构建中定义的所有参数公开为只读映射 具有各种类型的值。示例:
如果(params.BOOLEAN_PARAM_NAME){doSomething()}或提供一个 非平凡的默认值:
if(params.get('BOOLEAN_PARAM_NAME',true)){doSomething()}注意 多分支(Jenkinsfile)用法:属性步骤可让您 定义作业属性,但是这些属性会在执行步骤时生效, 而构建参数定义通常在 构建开始。为了方便起见,当前在 具有默认值的作业也会在此地图中列出。 这样您就可以编写,例如:
properties([parameters([string(name:'BRANCH',defaultValue: 'master')])])git url:'…',branch:params.BRANCH,请确保 即使在最初的构建过程中,主分支也会被检出 分支项目,或者如果先前的构建未指定参数,或者 使用了不同的参数名称。
使用类似下面的内容。
def dumpParameter()
{
params.each {
println it.key + " = " + it.value
}
}
答案 8 :(得分:0)
以下内容可用于检索环境参数:
println System.getenv("MY_PARAM")
答案 9 :(得分:0)
感谢patrice-n!这段代码可以同时获取正在排队和正在运行的作业及其参数:
import hudson.model.Job
import hudson.model.ParametersAction
import hudson.model.Queue
import jenkins.model.Jenkins
println("================================================")
for (Job job : Jenkins.instanceOrNull.getAllItems(Job.class)) {
if (job.isInQueue()) {
println("------------------------------------------------")
println("InQueue " + job.name)
Queue.Item queue = job.getQueueItem()
if (queue != null) {
println(queue.params)
}
}
if (job.isBuilding()) {
println("------------------------------------------------")
println("Building " + job.name)
def build = job.getBuilds().getLastBuild()
def parameters = build?.getAllActions().find{ it instanceof ParametersAction }?.parameters
parameters.each {
def dump = it.dump()
println "parameter ${it.name}: ${dump}"
}
}
}
println("================================================")
答案 10 :(得分:0)
我用这个
node {
//single
echo 'deploy' + env.PROJECT_NAME
// list all
echo sh(returnStdout: true, script: 'env')
}
答案 11 :(得分:0)
以下代码段对我有用,可以在参数化项目中获取参数值:
String myParameter = this.getProperty('binding').getVariable('MY_PARAMETER')
目标是根据选定的项目参数动态锁定资源。
在“[✓] 此构建需要可锁定资源”中,我有以下“[✓] Groovy 表达式”:
if (resourceName == 'resource_lock_name') {
Binding binding = this.getProperty('binding')
String profile = binding.getVariable('BUILD_PROFILE')
return profile == '-Poradb' // acquire lock if "oradb" profile is selected
}
return false
在“[✓] 此项目已参数化”部分中,我有一个名为例如的“选择参数” BUILD_PROFILE 选项示例如下:
-Poradb
-Ph2db
-DskipTests -T4
只有在带参数构建项目时选择了“-Poradb”才会获取对“resource_lock_name”的锁
[-] 应取消选中使用 Groovy Sandbox 以使此语法起作用