2016-07-15 16 views
2

Ich habe Probems mit meiner Jenkins-Pipeline. Ich möchte Folgendes tun: Wenn das Build-Enviroment bereits im Arbeitsbereich vorhanden ist, führen Sie einen (inkrementellen) Build mit der vorherigen Umgebung aus.Jenkins Pipeline: Versuchen Sie,/insyde einen Wiederholungsblock zu fangen

Wenn das mit einem sauberen Build wiederholt erneut fehlschlägt (löschen vorherige Buiod Umwelt, dann wieder aufbauen)

Ich versuche, dies zu tun durch:

retry(1) { 
     try { 
      prepareEnvironment() 
      setupBuildEnvironment() // sets up environment if it is not present yet 
      runBuild() 
     } catch (e) { 
      echo 'Err: Incremental Build failed with Error: ' + e.toString() 
      echo '  Trying to build with a clean Workspace' 
      removeOldBuildEnvironment() 
     } finally { 
      cleanupEnvironment() 
     } 
    } 

Als ich das laufe in Jenkins und dem runBuild() Schritt fehlschlägt ich:

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts nicht erlaubt neue java.lang.Except zu verwenden ion java.lang.String

Ich denke, das Problem ist der Versuch/Fang innerhalb der Wiederholung (1) Block. Irgendwelche Vorschläge, wie man das repariert

Ich habe es auch ohne den Versuch versucht. Hier hatte ich das Problem, dass, wenn der

bat "..." 

Schritt innerhalb runBuild() gibt eine Ausnahme, die Pipeline-Stufe markiert als scheitern, auch wenn ich die exeption fange und der bereinigter Build ist ein Erfolg.

Irgendwelche Vorschläge?

Antwort

3

Gehen Sie zur Skriptgenehmigung (in Jenkins verwalten, irgendwo unten) und genehmigen Sie Methode für Ausnahme.

Wenn Sie die Skriptgenehmigung nicht finden können, installieren Sie zuerst das Plugin https://wiki.jenkins-ci.org/display/JENKINS/Script+Security+Plugin.

Möglicherweise müssen Sie diese Seite besuchen, wenn Sie RejectedAccessException sehen.

3

die Fehlermeldung nicht, weil die try/catch aber wegen des Werfen Ausnahme in den prepareEnvironment, setupBuildEnvironment oder runBuild Methoden, wie throw new Exception("message") die nicht im Sandbox-Modus erlaubt. Was ist erlaubt ist, den error Schritt unter Verwendung von in etwa so:

def runBuild() { 
    // ... 
    error "ERR" 
} 

Dieser Schritt ein hudson.AbortException mit der Meldung angegebenen werfen.

Der Block Fang in Ihr Code wird diese Ausnahme abfangen und die richtige Nachricht aufrufe drucken dann removeOldBuildEnvironment

Auf der anderen Seite mit dieser Skript arbeitet immer noch nicht wie erwartet durchgeführte Änderung wird als die Ausnahme von dem Fang verschluckt blockieren, damit der Wiederholungsschritt den Code nicht erneut ausführt. Um es die Ausnahme machen arbeiten muss wieder geworfen werden aus dem catch-Block (Anmerkung, die Sie haben verwenden retry(2) statt retry(1))

retry(2) { 
    try { 
     prepareEnvironment() 
     setupBuildEnvironment() // sets up environment if it is not present yet 
     runBuild() 
    } catch (e) { 
     echo 'Err: Incremental Build failed with Error: ' + e.toString() 
     echo '  Trying to build with a clean Workspace' 
     removeOldBuildEnvironment() 
     throw e 
    } finally { 
     cleanupEnvironment() 
    } 
} 
0

Versuchen Sie die Checkbox „Groovy Sandbox“ zu deaktivieren.