66 votes

Pipeline de passer des paramètres à l'aval des emplois

Je suis l'aide de Jenkins v2.1 avec la prestation intégrée de pipeline fonctionnalité (https://jenkins.io/solutions/pipeline/) pour orchestrer deux versions (construire et déployer).

Dans mon paramétrée construire, j'ai 3 paramètres de l'utilisateur de l'installation, qui doit également être sélectionné dans le pipeline.

Le pipeline de script comme suit:

node: {
    stage 'build'
    build job: 'build', parameters: [[$class: 'StringParameterValue', name: 'target', value: target], [$class: 'ListSubversionTagsParameterValue', name: 'release', tag: release], [$class: 'BooleanParameterValue', name: 'update_composer', value: update_composer]]

    stage 'deploy'
    build job: 'deploy', parameters: [[$class: 'StringParameterValue', name: 'target', value: target]]
}

Cela fonctionne correctement à l'exception de l' BooleanParameterValue. Quand je construire le pipeline, l'erreur suivante est générée:

java.lang.ClassCastException: hudson.model.BooleanParameterValue.value expects boolean but received class java.lang.String

Comment puis-je résoudre ce typecasting erreur? Ou encore mieux, est-il moins lourd manière dont je peux juste passer TOUS le pipeline des paramètres à l'aval de l'emploi.

55voto

abguy Points 273

En plus de Jesse Glick réponse, si vous voulez passer des paramètre de chaîne alors utiliser:

build job: 'your-job-name', 
    parameters: [
        string(name: 'passed_build_number_param', value: String.valueOf(BUILD_NUMBER)),
        string(name: 'complex_param', value: 'prefix-' + String.valueOf(BUILD_NUMBER))
    ]

41voto

Jesse Glick Points 3877

En supposant que

value: update_composer

a la question, essayez de

value: Boolean.valueOf(update_composer)

est-il moins lourd manière dont je peux juste passer TOUS le pipeline des paramètres à l'aval de l'emploi

Pas que je sache, du moins pas sans l'aide de Jenkins appels de l'API et de la désactivation de l'Groovy bac à sable.

14voto

dsaydon Points 847

comme Jesse Jesse Glick et abguy dit que vous pouvez énumérer chaîne en type Booléen:

Boolean.valueOf(string_variable)

ou, au contraire, Boolean en chaîne:

String.valueOf(boolean_variable)

dans mon cas, j'ai dû en aval paramètre Booléen à un autre emploi. Donc, pour cela, vous aurez besoin d'utiliser la classe BooleanParameterValue :

build job: 'downstream_job_name', parameters:
[
[$class: 'BooleanParameterValue', name: 'parameter_name', value: false],
], wait: true

6voto

Cosmo Points 55

Jenkins "boolean" les paramètres sont vraiment juste un raccourci pour le "choix du paramètre" type avec le choix codé en dur pour les chaînes de caractères "true" et "false", et avec une case à cocher pour définir la variable de chaîne. Mais à la fin, c'est juste que: une variable de type chaîne, n'ayant rien à voir avec une véritable valeur booléenne. C'est pourquoi vous avez besoin de convertir la chaîne de caractères en une valeur booléenne si vous ne voulez pas faire une comparaison de chaînes de caractères comme:

if (myBoolean == "true")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X