问题描述
输入消息:'合并',参数在我的Jenkins多输入管道项目中,我有一个像这样的输入步骤: :[[$ class:'BooleanParameterDefinition',defaultValue:true,description:'',name:Merge $ {branchConfig.merge} to $ {env.BRANCH_NAME}?]]
我通过调用这个网址开始这项工作:
现在我想添加一个GET参数,如下所示:
我现在的问题是,我怎么能在groovy中获取这个参数?
更新:在第一条评论之后,我做了以下操作:
//添加参数以跳过MergeInput。
属性([[$ class:'ParametersDefinitionProperty',parameterDefinitions:[[$ class:'BooleanParameterDefinition',name:'skipMergeInput',defaultValue:false]]]])
然后调整输入:
输入消息:'Merge',参数:[[$ class:'BooleanParameterDefinition',defaultValue:params.skipMergeInput,description:'',name:Merge $ {branchConfig.merge} to $ {env.BRANCH_NAME}?]]]
当我开始工作时,它会显示一个弹出窗口,询问应该显示的值组。但不管我决定如何,输入总是错误的。我试图弄清楚什么是错误的,然后将更新我的帖子。
更新2:
所以我一直在调试。我在groovy脚本中添加了以下内容://添加参数以跳过MergeInput。
def doMerge = properties([[$ class:'ParametersDefinitionProperty',parameterDefinitions:[[$ class:'BooleanParameterDefinition',name:'doMerge',defaultValue:true]]]])
println doMerge;
输出将返回NULL,当我做类似于
println params.doMerge
它告诉我params没有定义。任何想法发生了什么问题?
更新3:
$ b 致电网址:/ job / dg_test / job / master / buildWithParameters?test = true
Groovy Script:
属性([[$ class:'ParametersDefinitionProperty',parameterDefinitions:[[$ class:'BooleanParameterDefinition',name:'test',defaultValue:false]]]])
println params.test
结果:
property:params for class:groovy.lang.Binding
解决方案我终于解决了,这篇文章真的帮了我: p>
这是我的实现:
//添加花哨的构建参数。
properties([
parameters([
booleanParam(
defaultValue:false,
description:'Some description',
name:'developmentMerge'
$)
if(developmentMerge ==true|| developmentMerge == true){
// Your code here
}
else {
//你的代码在这里
}
当我现在从GUI手动开始我的工作时,它会问我应该为developmentMerge设置哪个值。
我也可以开始工作调用以下URL:
/ job / dg_test / job / master / buildWithParameters?developmentMerge = true
其中dg_test是我的Jenkins项目的名称和主人是我想要开始的工作。
if语句必须像这样完成:
if(developmentMerge ==true|| developmentMerge == true)
因为当你从GUI开始工作时,它会发送一个布尔值t rue,但是当你通过URL调用开始工作时,你会收到一个字符串。
In my Jenkins multi pipeline project i am having a input step like this:
input message: 'Merge', parameters: [[$class: 'BooleanParameterDefinition', defaultValue: true, description: '', name: "Merge ${branchConfig.merge} to ${env.BRANCH_NAME}?"]]
I am starting this job by calling this url:
http://user:api-token@awesome.jenkins.de/job/myTest/job/dev/build
Now I want to add a GET parameter like this:
http://user:api-token@awesome.jenkins.de/job/myTest/job/dev/build?skipInput=true
My question now is, how can I get this parameter in groovy?
UPDATE: Following the first comment, I did the following:
// Add parameter to skip MergeInput. properties([[$class: 'ParametersDefinitionProperty', parameterDefinitions: [[$class: 'BooleanParameterDefinition', name: 'skipMergeInput', defaultValue: false]]]])
And adjusted the input like that:
input message: 'Merge', parameters: [[$class: 'BooleanParameterDefinition', defaultValue: params.skipMergeInput, description: '', name: "Merge ${branchConfig.merge} to ${env.BRANCH_NAME}?"]]
When I am now starting my job, it shows me a popup that ask for the value that should be set. But no matter what i decide, the input is always false. I am trying to figure out what is going wrong and will update my post then.
UPDATE 2:So I kept on debugging. I added the following to my groovy script:
// Add parameter to skip MergeInput. def doMerge = properties([[$class: 'ParametersDefinitionProperty', parameterDefinitions: [[$class: 'BooleanParameterDefinition', name: 'doMerge', defaultValue: true]]]]) println doMerge;
The output returns me NULL, and when I am doing something like
println params.doMerge
It tells me that params is not defined. Any idea what is going wrong?
UPDATE 3:
Call URL: /job/dg_test/job/master/buildWithParameters?test=true
Groovy Script:
properties([[$class: 'ParametersDefinitionProperty', parameterDefinitions: [[$class: 'BooleanParameterDefinition', name: 'test', defaultValue: false]]]]) println params.test
Result:
No such property: params for class: groovy.lang.Binding
解决方案I finally solved it, this post really helped me: https://stackoverflow.com/a/41276956/1565249
And this is my implementation:
// Add fancy build parameter. properties([ parameters([ booleanParam( defaultValue: false, description: 'Some description', name: 'developmentMerge' ), ]) ]) if (developmentMerge == "true" || developmentMerge == true) { // Your code here } else { // Your code here }
When I now start my job manually from the GUI, it asks me which value should be set for "developmentMerge".
And I also can start my job by calling this URL:"/job/dg_test/job/master/buildWithParameters?developmentMerge=true"
Where "dg_test" is the name of my Jenkins project and "master" is the job i wanted to start.
The if statement must be done like this:
if (developmentMerge == "true" || developmentMerge == true)
because when you start the job from GUI, it will send a boolean "true", but when you start the job by the URL call, you receive a string.
这篇关于Jenkins Groovy URL获取参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!