webentwicklung-frage-antwort-db.com.de

Pipeline-Übergabeparameter an nachgelagerte Jobs

Ich verwende Jenkins v2.1 mit der integrierten Delivery-Pipeline-Funktion ( https://jenkins.io/solutions/pipeline/ ), um zwei vorhandene Builds zu orchestrieren (Build und Deploy).

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

Das Pipeline-Skript lautet 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]]
}

Das funktioniert korrekt, außer für BooleanParameterValue. Wenn ich die Pipeline aufbaue, wird der folgende Fehler ausgegeben:

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

Wie kann ich diesen Typecasting-Fehler beheben? .__ Oder noch besser: Gibt es einen weniger umständlichen Weg, auf dem ich ALLE Pipeline-Parameter an den nachfolgenden Job übergeben kann.

38
Bram Gerritsen

Angenommen,

value: update_composer

war das Problem, versuchen Sie es

value: Boolean.valueOf(update_composer)

gibt es einen weniger umständlichen Weg, auf dem ich ALLE Pipeline-Parameter an den nachfolgenden Job übergeben kann

Nicht, dass ich weiß, zumindest nicht ohne Jenkins API-Aufrufe und Deaktivieren der Groovy-Sandbox.

29
Jesse Glick

Wenn Sie zusätzlich zu Jesse Glick answer den String-Parameter übergeben möchten, verwenden Sie:

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))
    ]
29
abguy

wie Jesse Jesse Glick und abguy Sie können String in einen booleschen Typ auflisten:

Boolean.valueOf(string_variable)

oder das gegenüberliegende Boolean in string:

String.valueOf(boolean_variable)

in meinem Fall musste ich den booleschen Parameter einem anderen Job nachleiten. Hierfür benötigen Sie die Klasse BooleanParameterValue:

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

Jenkins "boolesche" Parameter sind eigentlich nur eine Abkürzung für den Typ "Auswahlparameter" mit den fest in die Zeichenfolgen "true" und "false" codierten Auswahlmöglichkeiten und mit einem Kontrollkästchen zum Festlegen der Zeichenfolgenvariablen. Aber am Ende ist es nur das: eine String-Variable, die nichts mit einem echten Booleschen zu tun hat. Aus diesem Grund müssen Sie den String in einen Booleschen Wert konvertieren, wenn Sie keinen Stringvergleich durchführen möchten.

if (myBoolean == "true")

3
Cosmo