Derzeit habe ich einen Pipeline-Job mit verschiedenen Parametern, wobei einer dieser Parameter ein Choice-Parameter ist. Hier ist die config.xml-Ausgabe dieses Jobparameters:
<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>
Jetzt kann ich diesen Job über eine Pipeline aufrufen, indem ich einen String-Parameter übergebe:
build job: "NameOfTheJob"", parameters:
[
[$class: 'StringParameterValue', name: 'BRANCH', value: "${BRANCH}"],
]
Es gelang mir jedoch nicht, die Parameter für einen Auswahlparameter zu definieren:
Ich habe Folgendes versucht:
build job: "NameOfTheJob"", parameters:
[
[$class: 'StringParameterValue', name: 'BRANCH', value: "${BRANCH}"],
[$class: 'ChoiceParameterValue', name: 'WHERE', value: 'F3'],
]
Dies schlug jedoch mit folgendem Fehler fehl:
Java.lang.UnsupportedOperationException: no known implementation of class hudson.model.ParameterValue is named ChoiceParameterValue
Die Frage lautet also: So definieren Sie Auswahlparameter beim Aufrufen eines anderen Pipeline-Jobs:
build job: "NameOfTheJob"", parameters:
[
[$class: 'StringParameterValue', name: 'BRANCH', value: "${BRANCH}"],
[$class: '??????', ????],
]
Hat jemand ein Beispiel dafür?
Ich habe ein funktionierendes Beispiel gesehen, das die folgende Syntax verwendet:
build job:'NameOfTheJob', parameters: [
string(name: 'FirstOption', value: "test"),
string(name: 'AnotherOption', value: "test12")
]
Behandeln Sie die Auswahlparameter grundsätzlich nicht auf besondere Weise, sondern nur als reguläre Zeichenfolgenparameter.
Im Skriptmodus können Sie dies auch so tun, da es im Moment fehlerhaft ist und die Auswahlparameter als durch Zeilenumbrüche getrennte Zeichenfolge anstelle eines Arrays erwartet. Wenn Sie die Pipeline und JenkinsFile im Skriptmodus verwenden, können Sie eine Schnellkorrektur wie folgt durchführen:
properties(
[parameters([choice(choices: ["A", "B", "C"].join("\n"),
description: 'Some choice parameter',
name: 'SOME_CHOICE')])])
Sie können dies vor Ihre erste Knotenanweisung stellen, um Ihren Builds Parameter hinzuzufügen.
Update: Beispiel Multi Select mit Extended Choice Parameter Plugin in der Jenkins Pipeline Datei:
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
])
])
Anhand der Spitze von c3st7n habe ich folgendes getestet:
build job: "NameOfTheJob"", parameters:
[
[$class: 'StringParameterValue', name: 'BRANCH', value: "${BRANCH}"],
[$class: 'StringParameterValue', name: 'WHERE', value: "F3"],
]
Das funktioniert.