2017-10-22 3 views
0

Ich versuche folgendes zu erreichen:Jenkins: Run Serenity Abnahmeprüfungen ohne Fehler

  1. Führen Sie einen Satz von Serenity (plus Gurke) Tests als Teil eines Build-Pipeline
  2. die Berichte sammeln, unabhängig davon, ob alle Tests erfolgreich waren oder nicht (sie sind besonders hilfreich bei Fehlern)
  3. Nur im Falle von Testfehlern per E-Mail die Mitwirkenden
  4. Nie den Build aufgrund eines fehlgeschlagenen Akzeptanztests fehlschlagen, da diese Pipeline für das Commit ist CI. Will nur scheitern, wenn es in der Nightly gebrochene Abnahmetests gibt.

Also mit, dass alle im Auge ich versuche, den Weg den Build zu konfigurieren:

stage ('Serenity') { 
     steps { 
      // For the Delivery CI build don't fail on regression failure 
      sh 'mvn clean verify -pl regression -DskipCuke=false' 
     } 
     post { 
      always { 
       publishHTML([allowMissing: true, alwaysLinkToLastBuild: true, 
       keepAll: true, reportDir: 'regression/target/site/serenity', 
       reportFiles: 'index.html', reportName: 'Serenity', 
       reportTitles: '']) 
      } 
      failure{ 
       echo 'There are regression suite failures.' 
       script { 
        currentBuild.result = 'SUCCESS' 
       } 
       emailext attachLog: true, body: 'Find Attached', 
        compressLog: true, recipientProviders: [[$class: 
        'CulpritsRecipientProvider']], subject: 'Broken Regression Tests', 
        to: '[email protected]' 
      } 
     } 
    } 

aber es funktioniert nicht, da ich nicht den Wert von currentBuild.result auf ‚Erfolg‘ zurücksetzen. Also könnte ich alle || true zum mvn Befehl, aber das würde bedeuten, dass ich über die gebrochenen Regressionstests keine E-Mails schreiben kann.

Also ich frage mich, ob jemand anderes ihre geschickt auf eine clevere Weise damit umgegangen ist. Muss ich einen Exit-Code oder etwas anderes zuweisen, und würde das die Überschreibung der Standard-Shell-Parameter in Jenkins beinhalten?

Jede Hilfe sehr geschätzt.

Antwort

1

Ich denke, Sie müssten einen Versuch/Fang um die Shell (so führen Sie es in einem script{} Block), und tun Sie Ihre E-Mail in den Fang. Dann können Sie den Buildsatz auf ERFOLG setzen.

1

Ich löste das tatsächlich in einer etwas anderen Weise als @ Robs Vorschlag, aber der Schlüssel dazu war zu verstehen, dass das, was ich tun wollte, den script Block mit dem returnStatus Flag verwendete. Ich ziehe das einem Try-Catch vor, da ich eigentlich (leider) erwarte, dass dies von Zeit zu Zeit scheitert, und würde es daher bevorzugen, dies unten zu verzweigen.

stage ('Serenity') { 
     steps { 
      script{ 
      // For the Delivery CI build don't fail on regression failure 
      def bddPassed = (sh (returnStatus:true, script:'mvn clean verify -pl regression -DskipCuke=false') == 0) 
      if(!bddPassed){ 
       echo 'There are regression suite failures.' 
       def mySubject = "Regression Test Failure: ${env.JOB_NAME} - Build# ${env.BUILD_NUMBER}" 
       def myBody = "Hi<br/>Please go to <a href='${env.BUILD_URL}Serenity'>the Serenity Report</a> to see more<br/>"; 

       emailext attachLog: true, 
       mimeType: 'text/html', 
       body: myBody, 
       compressLog: true, 
       recipientProviders: [[$class: 'CulpritsRecipientProvider']], 
       subject: mySubject, 
       to: 'xxxxxxx' 
      } 
      publishHTML([allowMissing: true, alwaysLinkToLastBuild: true, 
       keepAll: true, reportDir: 'regression/target/site/serenity', reportFiles: 'index.html', 
       reportName: 'Serenity', reportTitles: '']) 
      } 
     } 
    }