Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Jenkins Choice parameter Passing to a pipeline Job

Tags:

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:

<hudson.model.ChoiceParameterDefinition>     <choices class="java.util.Arrays$ArrayList">         <a class="string-array">             <string>f1</string>             <string>f2</string>             <string>f3</string>             <string>f4</string>         </a>     </choices>     <name>WHERE</name>     <description>Something</description> </hudson.model.ChoiceParameterDefinition> 

Now I can call this job from a pipeline via by passing a string parameter:

build job: "NameOfTheJob"", parameters:   [     [$class: 'StringParameterValue', name: 'BRANCH', value: "${BRANCH}"],   ] 

But I couldn't get a way to define the parameters for a choice parameter:

I have tried the following:

build job: "NameOfTheJob"", parameters:   [     [$class: 'StringParameterValue', name: 'BRANCH', value: "${BRANCH}"],     [$class: 'ChoiceParameterValue', name: 'WHERE', value: 'F3'],   ] 

But this failed with the following error:

java.lang.UnsupportedOperationException: no known implementation of class hudson.model.ParameterValue is named ChoiceParameterValue 

So the question is: How to define a choice parameters in calling an other pipeline job:

build job: "NameOfTheJob"", parameters:   [     [$class: 'StringParameterValue', name: 'BRANCH', value: "${BRANCH}"],     [$class: '??????', ????],   ] 

Does someone has an example of such thing?

like image 936
khmarbaise Avatar asked Jan 20 '17 08:01

khmarbaise


People also ask

How does Jenkins pipeline pass Choice parameters?

Go to Jenkins Home, select New Item, add a name for your Job, for the project type, select Pipeline project and click on Ok. On the configure job page select the This project is parameterized checkbox in the general tab. Now, we will add an Active Choices Parameter which renders our Application Tiers as a Dropdown.

How do I pass a parameter from one job to another in Jenkins?

You can use Parameterized Trigger Plugin which will let you pass parameters from one task to another. You need also add this parameter you passed from upstream in downstream.


2 Answers

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.

like image 92
c3st7n Avatar answered Sep 21 '22 10:09

c3st7n


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         ]) ]) 
like image 38
Arjan Schokking Avatar answered Sep 20 '22 10:09

Arjan Schokking