如何使用Groovy动态构建Jenkins管道输入参数?

时间:2017-11-24 13:34:26

标签: jenkins groovy jenkins-pipeline

在Jenkins管道中,可以使用

请求输入数据
def returnValue = input message: 'Need some input', 
   parameters: [string(defaultValue: 'adefval', description: 'a', name: 'aaa'),
                string(defaultValue: 'bdefval', description: 'b', name: 'bbb')] 

为了动态构建这样的列表,我尝试了类似

的东西
def list = ["foo","bar"]
def inputRequest = list.collect  { string(defaultValue: "def", description: 'description', name: it)  }

def returnValue = input message: 'Need some input', parameters: [inputRequest]   

这不起作用:

  

java.lang.ClassCastException:class org.jenkinsci.plugins.workflow.support.steps.input.InputStep.setParameters()需要类hudson.model.ParameterDefinition但是收到类java.util.ArrayList

可能Groovy可以在第一种情况下动态地找出哪个对象是必需的,但在第二种情况下它不再起作用,因为collect返回一个ArrayList?

如何正确创建这样的列表?

编辑:也许这个问题本身并不是很有用,但仍可作为代码示例......

2 个答案:

答案 0 :(得分:0)

好的,这是一个非常简单的修复,因为收集已经返回ArrayList,在设置参数时不应该将其包装到另一个列表中...

def returnValue = input message: 'Need some input', parameters: inputRequest  

答案 1 :(得分:0)

您可以使用以下代码。它将为您生成选择A,B,C。这可以通过使用Jenkins中的“管道语法”选项来找到。我使用它是因为它可以节省时间并减少错别字。

def createInputParameters(){
properties([[$class: 'RebuildSettings', autoRebuild: false, rebuildDisabled: 
false],parameters([choice(choices: ['A', 'B', 'C'], description: '', name: 
'Test')]),
[$class: 'ThrottleJobProperty', categories: [],
limitOneJobWithMatchingParams: false,
maxConcurrentPerNode: 0, maxConcurrentTotal: 0,
 paramsToUseForLimit: '',
  throttleEnabled: false,
   throttleOption: 'project']])

}