2016-05-04 11 views
20

Ich benutze Jenkins v2.1 mit der integrierten Pipeline-Funktion (https://jenkins.io/solutions/pipeline/), um zwei bestehende Builds zu orchestrieren (Build und Deploy).Pipeline-Pass-Parameter zu Downstream-Jobs

In meinem parametrisierten Build habe ich 3 Benutzerparameter eingerichtet, die auch in der Pipeline auswählbar sein müssen.

Die Pipeline-Skript ist wie folgt:

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

Dies funktioniert korrekt mit Ausnahme der BooleanParameterValue. Beim Erstellen der Pipeline wird der folgende Fehler ausgegeben:

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

Wie kann ich diesen Tippfehler beheben? Oder noch besser, gibt es eine weniger umständliche Art und Weise, in der ich einfach alle Pipeline-Parameter an den nachgelagerten Job übergeben kann.

+0

Wie bin ich in der Lage zu verwenden, um sie in meinem Downstream-Job (F. E. den Wert von ‚Ziel‘ in Druckbuchstaben)? –

Antwort

16

Unter der Annahme,

value: update_composer 

das Problem wurde, versuchen

value: Boolean.valueOf(update_composer) 

gibt es eine weniger umständliche Art und Weise, kann ich nur allen Pipeline-Parameter an die Downstream-Job passieren

Nicht, dass ich weiß, zumindest nicht ohne Jenkins API-Aufrufe und deaktivieren t er Groovy Sandkasten.

+0

danke für deine antwort. Ich werde es nächsten Montag versuchen, wenn ich wieder bei der Arbeit bin. Habe jetzt ein paar freie Tage. –

+6

Ihre Antwort funktioniert für mich. Ich fand sogar einen kürzeren Weg beim Lesen der groovigen Dokumentation. 'update_composer.toBoolean()' funktioniert auch. –

+2

+1 für @BramGerritsen Kommentar - das funktionierte für mich sogar in der Groovy Sandbox, während der 'Boolean.valueOf' nicht :) –

12

Neben Jesse Glick Antwort, wenn Sie String-Parameter übergeben wollen, dann verwenden:

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)) 
    ] 
+5

' Build Job: 'deploy', Parameter: [booleanParam (Name: 'Ziel', Wert : target)] 'ist die äquivalente Syntax für boolesche Parameter –

+0

dies scheint nur für neuere Jenkins zu funktionieren, siehe https://issues.jenkins-ci.org/browse/JENKINS-27295 –

0

wie Jesse Jesse Glick und abguy die Sie String in Boolean Typ aufzählen kann:

Boolean.valueOf(string_variable) 

oder gegenüberliegend Boolean in Zeichenfolge:

String.valueOf(boolean_variable) 

in meinem Fall musste ich nach Boolean Downstream-Parameter zu einem anderen Job. hierfür So müssen Sie die Verwendung der Klasse BooleanParameterValue:

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