2017-06-12 3 views
0

Ich bin eine deklarative Jenkins Pipeline erstellen, die wie folgt aussieht:Mark Jenkins Build als Erfolg, im Falle einer Zeitüberschreitung bei der Eingabe? (Deklarative Pipeline)

pipeline { 
    agent { 
     label 'mylabel' 
    } 
    stages { 
     stage('Install dependencies') { 
      milestone() 
      steps { 
       sh "yarn install" 
      } 
     } 
     stage('Lint files') { 
      steps { 
       sh "eslint src" 
      } 
     } 
     stage('Create bundle') { 
      steps { 
       sh "yarn run build:server" 
       sh "yarn run build:client" 
      } 
     } 
     stage('Publish') { 
      steps { 
       timeout(time: 15, unit: 'SECONDS') { 
        input(message: 'Deploy this build to QA?') 
       } 
       // deployment steps 
      } 
     } 

    } 
} 

Es funktioniert großartig, aber wenn der Timeout-Schritt fehlschlägt (weil wir nicht wollen, diese Build bereitstellen, oder niemand ist da, um den Knopf zu drücken, und so weiter), der Build ist mit Status "abgebrochen" markiert. Leider bedeutet dies, dass zum Beispiel Github unsere Pull-Anfragen als "Checks Failing" markiert.

Gibt es eine Möglichkeit, den Build mit dem Status zu deklarieren, den er vor dem timeout() - Schritt hatte? Z.B. Wenn der Build bis zum Timeout-Schritt erfolgreich war, sollte er als Erfolg markiert werden, auch wenn das Zeitlimit überschritten wird.

Antwort

1

Wir haben eine Situation, in der wir keinen Build starten wollen, wenn keine Benutzer-Commits vorliegen. Aufgrund eines Fehlers in der SCM-Trigger-Prävention für Nachricht oder Benutzer. Was wir dann tun, ist das Scheitern der Erstellung mit einem NOT_BUILT-Ergebnis.

Vielleicht wird dies auch für Ihre Situation arbeiten

Versuchen Sie Folgendes in Ihrem Skript

try { 
    stage ('wait') { 
     timeout(time: 15, unit: 'SECONDS') { 
      input(message: 'Deploy this build to QA?') 
     } 
    } 
} catch (err) { 
    def user = err.getCauses()[0].getUser() 
    if('SYSTEM' == user.toString()) { //timeout 
     currentBuild.result = "SUCCESS" 
    } 
} 
+0

Es ist nicht wie diese Syntax scheinen für deklarative Pipelines verwendet werden, erhalte ich 'WorkflowScript: 38: Erwartete eine Stufe @ Zeile 38, Spalte 9.'. Zeile 38 ist der Versuchsblock. –

+0

Ich denke, in der deklarativen Pipeline sollte der Versuch innerhalb der Bühne Block sein. Dieses Snippet wurde als Inline-Pipeline-Skript in einem Pipeline-Job getestet. –

+0

Ich habe versucht, es zu verschieben, innerhalb der Stufe, in Schritten, keiner von ihnen funktioniert –

Verwandte Themen