2017-09-20 2 views
0

Wenn ich ein Git-Repository voller Job DSL groovy Skripte und ein typischer Samen Job zB:Wie behandelt man Ausnahmen in einem Jenkins Job DSL-Seed Job?

job('seed') { 
    //... scm, triggers etc. 
    steps { 
     dsl { 
      external 'jobs/**/*.groovy' 
     } 
    } 
    //... more config etc. 
} 

, was passiert, wenn nur einer des Job dsl-Skripte eine Ausnahme aus irgendeinem Grunde wirft, zum Beispiel:

Kann diese Ausnahme im Seed-Job behandelt werden, oder schlägt der gesamte Seed-Job fehl?

Wenn alle bis auf einen funktionieren würde - ist es möglich, dass der Samen Job eine UNSTABLE Ergebnis eher als AUSFALL aufzunehmen?

Ich will nicht wirklich einen schlechten Apfel, um den Haufen zu verderben.

+1

Haben Sie versucht, es mit einem einfachen 'try-catch'-Block zu umhüllen? – Opal

+0

Das klingt vielversprechend. Wäre das in den spezifischen Jobs? Ich bin afaid Ich bin ziemlich neu in Groovy und Job DSL, also habe ich nicht ganz herausgefunden, was möglich ist. Wenn ich eine Ausnahme erwischt hätte, wie würde ich den Build als instabil markieren? –

+1

Normalerweise lege ich es in einen bestimmten Job. Die Verwendung von 'currentBuild.result = 'UNSTABLE' sollte die Aufgabe erledigen. – Opal

Antwort

0

Basierend auf Opals Vorschlag, einen try-catch zu verwenden, habe ich den Job modifiziert, um die Ausnahme zu erfassen und einen Fehler auf der Konsole auszugeben.

job('deliberate-fail') { 
    try { 
     throw new Exception("Arrrgggghhh") 
    } catch (Exception ex){ 
     println("deliberate-fail job is [UNSTABLE]") 
    } 
} 

Da ich zur Zeit bin mit der Job DSL plugin (und nicht Jenkins Pipeline-Skript), ich glaube nicht, Opal Vorschlag „currentBuild.result =‚unstable‘“ zu verwenden, um mich zur Verfügung stand. Nach ein wenig Graben fand ich heraus, dass ich die Text-Finder plugin verwenden konnte, um die Konsole nach dem Fehler "[UNSTABLE]" zu durchsuchen und den Seed-Job-Status entsprechend zu ändern.

job('seed-job') { 
    steps { 
     dsl { 
      external '**/*_jobdsl.groovy' 
     } 
    } 
    publishers { 
     textFinder(/[UNSTABLE]/, '', true, false, true) 
    }  
} 

Ein bisschen verschachtelt, aber es scheint zu funktionieren!