wake-up-neo.com

Jenkins-Auswahlparameter Übergabe an eine Pipeline Job

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?

10
khmarbaise

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.

24
c3st7n

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
        ])
])
11
Arjan Schokking

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.

3
khmarbaise