Currently I have a pipeline job which has different paramters where one of this parameters is a Choice parameter. Here is the config.xml output of that job parameter:
<Based on the tip of c3st7n I have tested the following:
build job: "NameOfTheJob"", parameters:
[
[$class: 'StringParameterValue', name: 'BRANCH', value: "${BRANCH}"],
[$class: 'StringParameterValue', name: 'WHERE', value: "F3"],
]
This works.
As documented at https://www.jenkins.io/doc/book/pipeline/syntax/#parameters in September 2020, the documented syntax to use a choice parameter in a pipeline is:
pipeline {
agent any
parameters {
choice(
name: 'CHOICE',
choices: ['one', 'two', 'three'],
description: ''
)
}
stages {
stage('Example') {
steps {
echo "Choice: ${params.CHOICE}"
sh "echo Choice: ${params.CHOICE}"
sh 'echo Choice: $CHOICE'
}
}
}
}
In testing, the choice defaults to the first parameter in the list, I have not looked into if this has potential to be otherwise.
All three versions of the task perform the same. Note the specific quotes used.
In script mode you can also do it like this, at the moment it is bugged and it expects the choice parameters as a newline delimited string instead of an array. When using the Pipeline and JenkinsFile in script mode you can do a quick fix like follows:
properties(
[parameters([choice(choices: ["A", "B", "C"].join("\n"),
description: 'Some choice parameter',
name: 'SOME_CHOICE')])])
You can put this before your first node statement to add parameters to your builds.
Update: example multi select with extended choice parameter plugin in Jenkins pipeline file:
com.cwctravel.hudson.plugins.extended_choice_parameter.ExtendedChoiceParameterDefinition extendedChoiceParameterDefinition = new com.cwctravel.hudson.plugins.extended_choice_parameter.ExtendedChoiceParameterDefinition(
"OPTION_NAME", // name
"PT_CHECKBOX", // type
"option1,option2,option3", // values
null, // projectName
null, // propertyFile
null, // groovyScript
null, // groovyScriptFile
null, // bindings
null, // groovyClasspath
null, // propertyKey
"option1,option2", // defaultValue
null, // defaultPropertyFile
null, // defaultGroovyScript
null, // defaultGroovyScriptFile
null, // defaultBindings
null, // defaultGroovyClasspath
null, // defaultPropertyKey
null, // descriptionPropertyValue
null, // descriptionPropertyFile
null, // descriptionGroovyScript
null, // descriptionGroovyScriptFile
null, // descriptionBindings
null, // descriptionGroovyClasspath
null, // descriptionPropertyKey
null, // javascriptFile
null, // javascript
false, // saveJSONParameterToFile
false, // quoteValue
10, // visible item count
"Select your options", // description
"," //multiSelectDelimiter
)
normalChoiceOptions = ["option1","option2"]
properties([
parameters([
choice(choices: normalChoiceOptions.join("\n"), description: 'Single select option', name: 'SOME_OPTION'),
extendedChoiceParameterDefinition
])
])
I have seen a working example that uses the below syntax:
build job:'NameOfTheJob', parameters: [
string(name: 'FirstOption', value: "test"),
string(name: 'AnotherOption', value: "test12")
]
Basically, don't treat the choice parameters in a special manner, just treat them as regular string parameters.
Use ExtendedChoiceParameterValue
instead of ChoiceParameterValue
e.g.
[$class: 'ExtendedChoiceParameterValue', name: 'param_name', value: 'param_value']