web-dev-qa-db-fra.com

Comment utiliser le plugin Extended Choice Parameter dans un script de pipeline Jenkins?

Le plugin Extended Choice Parameter est excellent et je l’utilise dans les travaux configurés via l’UI https://wiki.jenkins-ci.org/display/JENKINS/Extended+Choice+Parameter+plugin

Toutefois, je ne parviens pas à le faire fonctionner dans un script de pipeline de style Jenkinsfile . Il semblerait que le plug-in Extended Choice Parameter ne soit pas encore totalement compatible avec les scripts Pipeline puisque le générateur de syntaxe de pipeline Jenkins crée l'extrait suivant:

parameters([<object of type com.cwctravel.hudson.plugins.extended_choice_parameter.ExtendedChoiceParameterDefinition>])

Si je crée les paramètres manuellement, j'obtiens le même comportement que celui mentionné dans https://issues.jenkins-ci.org/browse/JENKINS-32188

org.kohsuke.stapler.NoStaplerConstructorException: There's no @DataBoundConstructor on any constructor of class 

Est-ce que quelqu'un connaît des solutions de contournement permettant d'éviter le problème de ExtendedChoiceParameterDefinition n'utilisant pas @DataBoundConstructor?

  • Jenkins 2.19.2
  • Extended Choice Parameter plugin 0.75
15
Spangen

Voici ma solution de contournement pour ce pb: 

https://Gist.github.com/jgraglia/44a7443847cff6f0d87387a46c7bb82f

ie: instancier manuellement le paramètre en déclarant tous les arguments

J'ai pu ajouter un paramètre de liste de contrôle multiple à mon pipeline avec cela.

5
jgraglia

Comme mkobit l'a dit, il n'est actuellement pas possible d'utiliser le plugin de choix étendu en tant que paramètre de construction. 

Ce que j’aime utiliser comme solution de contournement est une construction comme celle-ci:

timeout(time: 5, unit: TimeUnit.MINUTES) {
    def result = input(message: 'Set some values', parameters: [
        booleanParam(defaultValue: true, description: '', name: 'SomeBoolean'),
        choice(choices: "Choice One\nChoice Two", description: '', name: 'SomeChoice'),
        stringParam(defaultValue: "Text", description: '', name: 'SomeText')
    ]) as Map<String, String>
}

echo "${result.SomeBoolean}, ${result.SomeChoice}, ${result.SomeText}"

Et appelez-le au début de mon pipeline. On vous demande ensuite ces entrées peu de temps après le début de votre construction.

1
Torbilicious