web-dev-qa-db-fra.com

Paramètre Jenkins Choice Passage à un travail de pipeline

Actuellement, j'ai un travail de pipeline qui a différents paramètres où l'un de ces paramètres est un paramètre Choice. Voici la sortie config.xml de ce paramètre de travail:

<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>

Maintenant, je peux appeler ce travail à partir d'un pipeline via en passant un paramètre de chaîne:

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

Mais je n'ai pas réussi à définir les paramètres d'un paramètre de choix:

J'ai essayé ce qui suit:

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

Mais cela a échoué avec l'erreur suivante:

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

La question est donc la suivante: comment définir les paramètres de choix lors de l'appel d'un autre travail de pipeline:

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

Quelqu'un a-t-il un exemple d'une telle chose?

10
khmarbaise

J'ai vu un exemple de travail qui utilise la syntaxe ci-dessous:

build job:'NameOfTheJob', parameters: [
      string(name: 'FirstOption', value: "test"),
      string(name: 'AnotherOption', value: "test12")
]

Fondamentalement, ne traitez pas les paramètres de choix d'une manière spéciale, traitez-les simplement comme des paramètres de chaîne réguliers.

24
c3st7n

En mode script, vous pouvez également le faire comme ceci, au moment où il est buggé et il attend les paramètres de choix comme une chaîne délimitée par une nouvelle ligne au lieu d'un tableau. Lorsque vous utilisez le Pipeline et JenkinsFile en mode script, vous pouvez effectuer une correction rapide comme suit:

properties(
    [parameters([choice(choices: ["A", "B", "C"].join("\n"),
    description: 'Some choice parameter', 
    name: 'SOME_CHOICE')])])

Vous pouvez mettre cela avant votre première instruction de noeud pour ajouter des paramètres à vos builds.

Mise à jour: exemple de sélection multiple avec plug-in de paramètre de choix étendu dans le fichier de pipeline Jenkins:

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

Sur la base de la pointe de c3st7n, j'ai testé les éléments suivants:

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

  ]

Cela marche.

3
khmarbaise