2017-02-08 3 views
0

In meinem Jenkins Multi-Pipeline-Projekt ich bin mit einem Eingabeschritt wie folgt aus:Jenkins Groovy URL erhalten Parameter

input message: 'Merge', parameters: [[$class: 'BooleanParameterDefinition', defaultValue: true, description: '', name: "Merge ${branchConfig.merge} to ${env.BRANCH_NAME}?"]] 

ich diesen Job bin ab, indem Sie diese URL aufrufen:

http://user:[email protected]/job/myTest/job/dev/build

Jetzt Ich möchte einen GET-Parameter wie folgt hinzufügen:

http://user:[email protected]/job/myTest/job/dev/build?skipInput=true

Meine Frage ist jetzt, wie kann ich diesen Parameter in groovy bekommen?

UPDATE: den ersten Kommentar Folgen, habe ich folgendes:

// Add parameter to skip MergeInput. 
properties([[$class: 'ParametersDefinitionProperty', parameterDefinitions: [[$class: 'BooleanParameterDefinition', name: 'skipMergeInput', defaultValue: false]]]]) 

Und der Eingang so eingestellt:

input message: 'Merge', parameters: [[$class: 'BooleanParameterDefinition', defaultValue: params.skipMergeInput, description: '', name: "Merge ${branchConfig.merge} to ${env.BRANCH_NAME}?"]] 

Wenn ich jetzt meinen Job bin ab, es zeigt mir ein Popup die nach dem Wert fragen, der eingestellt werden soll. Aber egal was ich entscheide, die Eingabe ist immer falsch. Ich versuche herauszufinden, was schief läuft und werde dann meine Post aktualisieren.

UPDATE 2: Also habe ich weiter Debuggen. Ich habe folgendes mein groovy Skript:

// Add parameter to skip MergeInput. 
def doMerge = properties([[$class: 'ParametersDefinitionProperty', parameterDefinitions: [[$class: 'BooleanParameterDefinition', name: 'doMerge', defaultValue: true]]]]) 
println doMerge; 

Der Ausgang gibt NULL zurück, mich, und wenn ich etwas tue, wie

println params.doMerge 

Es sagt mir, dass params nicht definiert ist. Irgendeine Idee, was schief geht?

UPDATE 3:

Anruf URL:?/Job/dg_test/job/Master/buildWithParameters Test = true

Groovy Script:

properties([[$class: 'ParametersDefinitionProperty', parameterDefinitions: [[$class: 'BooleanParameterDefinition', name: 'test', defaultValue: false]]]]) 
println params.test 

Ergebnis:

No such property: params for class: groovy.lang.Binding 

Antwort

2

ich es endlich gelöst, diesen Beitrag hat mir wirklich geholfen: https://stackoverflow.com/a/41276956/1565249

Und das ist meine Umsetzung:

// Add fancy build parameter. 
properties([ 
    parameters([ 
    booleanParam(
     defaultValue: false, 
     description: 'Some description', 
     name: 'developmentMerge' 
    ), 
    ]) 
]) 

if (developmentMerge == "true" || developmentMerge == true) { 
    // Your code here 
} 
else { 
    // Your code here 
} 

Wenn ich jetzt meinen Auftrag manuell über die GUI starte, fragt er mich, welcher Wert für "developmentMerge" eingestellt werden soll.

Und ich kann meine Arbeit beginnen auch durch diese URL aufrufen: "/ job/dg_test/job/Master/buildWithParameters developmentMerge = true?"

Wo "dg_test" ist der Name meines Jenkins Projekt und " Master "ist der Job, den ich starten wollte.

Die if-Anweisung muss wie folgt erfolgen:

if (developmentMerge == "true" || developmentMerge == true) 

, weil, wenn Sie den Job von GUI zu starten, wird es eine boolean „true“ senden, aber wenn Sie den Job von der URL-Aufruf starten, können Sie empfange eine Zeichenfolge.

+0

Oh, wir bekommen Strings von der URL Ich habe noch keine Build-URLs verwendet, das ist gut zu wissen! Netter Fang :) – GabLeRoux

0

Dies ist in 3 einfachen Schritten erreichbar:

  1. einen Booleschen Parameter für Ihre Pipeline bauen Set: enter image description here
  2. die „params verwenden."Präfix für den Zugriff auf Ihre Parameter in Ihrer Eingangsnachricht Schritt:

    input message: 'Merge', parameters: [[$class: 'BooleanParameterDefinition', defaultValue: params.skipInput, description: '', name: "Merge ${branchConfig.merge} to ${env.BRANCH_NAME}?"]] 
    
  3. Verwenden Sie die "buildWithParameters" api Befehl statt "bauen":
    http://user:[email protected]/job/myTest/job/dev/buildWithParameters?skipInput=true

+0

Da ich eine Groovy-Datei verwende, kann ich meiner Jobkonfiguration nicht einfach Build-Parameter hinzufügen. Dies ist, was ich jetzt getan habe: (Update in meinem Beitrag) – Basti

+0

Sind Sie sicher, dass Sie die API mit dem "/ buildWithParameters" aufrufen und nicht nur "/ build". Es sieht so aus, als ob der Parameter überhaupt nicht übertragen wird. – eyalstoler

+0

Sehr sicher, sehe mein Update 3 – Basti