2015-02-23 5 views
38

Ich benutze Jenkins, Maven 3.1 und Java 1.6. Ich habe folgende Maven Job in Jenkins mit den folgenden Zielen und zur Einrichtung von Optionen ...Wie kann ich Jenkins Build fehlschlagen lassen, wenn Maven Unit Tests fehlschlagen?

clean install -U -P cloudbees -P qa 

unter meiner pom.xml todsichere Konfiguration ist ...

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.17</version> 
     <configuration> 
       <reuseForks>true</reuseForks> 
       <argLine>-Xmx2048m -XX:MaxPermSize=512M </argLine> 
       <skipTests>false</skipTests> 
     </configuration> 
</plugin> 

Wenn jedoch meine Unit-Tests scheitern, die Jenkins-Konsolenausgabe sagt immer noch "BUILD SUCCESS" und der Build wird als "unstable" markiert, anstatt dass er scheitert. Wie konfiguriere ich Dinge in Jenkins (oder Maven, wenn es sich herausstellt, was es ist), so dass mein Build fehlschlägt (nicht instabil wird oder besteht), wenn einer der Komponententests fehlschlägt?

Unten ist das, was die Konsolenausgabe sagt

17:08:04 MyProjectOrganizationControllerTest.testRecoverFromError » IllegalState Failed to... 
17:08:04 MyProjectOrganizationControllerTest.testVerifyDistrictListPopulated » IllegalState 
17:08:04 MyProjectOrganizationControllerTest.testUpdateSchool » IllegalState Failed to loa... 
17:08:04 MyProjectOrganizationControllerTest.testDeleteSchool » IllegalState Failed to loa... 
17:08:04 MyProjectOrganizationControllerTest.testVerifyOrgListPopulatedPrivateSchoolOrgType » IllegalState 
17:08:04 MyProjectOrganizationControllerTest.testSubmitMultipleParams » IllegalState Faile... 
17:08:04 
17:08:04 Tests run: 155, Failures: 0, Errors: 154, Skipped: 1 
17:08:04 
17:08:04 [ERROR] There are test failures. 
17:08:04 
17:08:04 Please refer to /scratch/jenkins/workspace/MyProject/MyProject/target/surefire-reports for the individual test results. 
17:08:04 [JENKINS] Recording test results 
17:08:07 log4j:WARN No appenders could be found for logger (org.apache.commons.beanutils.converters.BooleanConverter). 
17:08:07 log4j:WARN Please initialize the log4j system properly. 
17:08:14 [INFO] 
17:08:14 [INFO] --- maven-war-plugin:2.4:war (default-war) @ MyProject --- 
17:08:15 [INFO] Packaging webapp 
17:08:15 [INFO] Assembling webapp [MyProject] in [/scratch/jenkins/workspace/MyProject/MyProject/target/MyProject] 
17:08:15 [INFO] Processing war project 
17:08:15 [INFO] Copying webapp resources [/scratch/jenkins/workspace/MyProject/MyProject/src/main/webapp] 
17:08:15 [INFO] Webapp assembled in [662 msecs] 
17:08:15 [INFO] Building war: /scratch/jenkins/workspace/MyProject/MyProject/target/MyProject.war 
17:08:20 [INFO] 
17:08:20 [INFO] --- maven-failsafe-plugin:2.17:integration-test (default) @ MyProject --- 
17:08:20 [JENKINS] Recording test results 
17:08:25 [INFO] 
17:08:25 [INFO] --- maven-failsafe-plugin:2.17:verify (default) @ MyProject --- 
17:08:25 [INFO] Failsafe report directory: /scratch/jenkins/workspace/MyProject/MyProject/target/failsafe-reports 
17:08:25 [JENKINS] Recording test results[INFO] 
17:08:25 [INFO] --- maven-install-plugin:2.4:install (default-install) @ MyProject --- 
17:08:25 
17:08:25 [INFO] Installing /scratch/jenkins/workspace/MyProject/MyProject/target/MyProject.war to /home/jenkins/.m2/repository/org/mainco/subco/MyProject/76.0.0-SNAPSHOT/MyProject-76.0.0-SNAPSHOT.war 
17:08:25 [INFO] Installing /scratch/jenkins/workspace/MyProject/MyProject/pom.xml to /home/jenkins/.m2/repository/org/mainco/subco/MyProject/76.0.0-SNAPSHOT/MyProject-76.0.0-SNAPSHOT.pom 
17:08:26 Started calculate disk usage of build 
17:08:26 Finished Calculation of disk usage of build in 0 seconds 
17:08:26 Started calculate disk usage of workspace 
17:08:26 Finished Calculation of disk usage of workspace in 0 seconds 
17:08:26 [INFO] ------------------------------------------------------------------------ 
17:08:26 [INFO] BUILD SUCCESS 
17:08:26 [INFO] ------------------------------------------------------------------------ 
17:08:26 [INFO] Total time: 11:00.616s 
17:08:26 [INFO] Finished at: Mon Feb 23 17:08:26 UTC 2015 
17:08:27 [INFO] Final Memory: 90M/414M 
17:08:27 [INFO] ------------------------------------------------------------------------ 
17:08:27 Waiting for Jenkins to finish collecting data 
17:08:28 [JENKINS] Archiving /scratch/jenkins/workspace/MyProject/MyProject/pom.xml to org.mainco.subco/MyProject/76.0.0-SNAPSHOT/MyProject-76.0.0-SNAPSHOT.pom 
17:08:28 [JENKINS] Archiving /scratch/jenkins/workspace/MyProject/MyProject/target/MyProject.war to org.mainco.subco/MyProject/76.0.0- SNAPSHOT/MyProject-76.0.0-SNAPSHOT.war 
17:08:31 channel stopped 
17:08:31 Started calculate disk usage of build 
17:08:31 Finished Calculation of disk usage of build in 0 seconds 
17:08:31 Started calculate disk usage of workspace 
17:08:31 Finished Calculation of disk usage of workspace in 0 seconds 
17:08:31 Finished: UNSTABLE 

Antwort

38

Sie -Dmaven.test.failure.ignore=false zum MAVEN_OPTS hinzufügen können, wenn Sie auf Schaltfläche Erweitert im Build-Abschnitt Ihrer Jenkins Job klicken.

Siehe Maven Surefire Plugin - surefire:test Optionen als Referenz.

+2

Aber müssen wir dieses Flag wirklich als falsch angeben? Soweit ich weiß, wenn wir diese Ebene nicht angeben, ist der Standardwert nur "FALSE". Bitte vorschlagen. Vielen Dank! – OverrockSTAR

+9

Jenkins legt diesen Wert standardmäßig auf "True" fest. Sehen Sie sich https://issues.jenkins-ci.org/browse/JENKINS-24655 an – Torsten

+0

Danke, Sie sind richtig. Es hat für mich funktioniert! – OverrockSTAR

5

Verwenden Text Finder Plugin. Konfigurieren Sie es suchen There are test failures und degradieren die Build FAILED

+2

Nice Hack, aber ein Hack nichts desto trotz. – Alexey

+0

Abgesehen davon, dass ich ein Hack war, habe ich festgestellt, dass es mir nicht gelungen ist, einen UNSTABLE- in einen FAILED-Build zu downgraden. Ich dachte, es könnte etwas mit dem Dokumentierten zu tun haben, dass "die Neuklassifizierung nur für Builds gilt, die einen Gesamt-Exit-Status von Null zurückgaben". – bdeniker

0

Ein weiterer Hack, der nützlich sein kann, ist die Verwendung von groovy Post-Build, um Testergebnisse zu überprüfen und einzustellen.

z.B. Dieses Groovy ruft das Build-Ergebnis auf, hängt nützliche Dinge an, um eine Beschreibung zu erstellen, und setzt das Build-Ergebnis auf UNSTABLE, falls keine Pass- oder Fail-Tests vorliegen, aber alle Tests übersprungen wurden.

def currentBuild = Thread.currentThread().executable 
// must be run groovy post-build action AFTER harvest junit xml if you use junit xml test results 
testResult1 = currentBuild.testResultAction 

currentBuild.setDescription(currentBuild.getDescription() + "\n pass:"+testResult1.result.passCount.toString()+", fail:"+testResult1.result.failCount.toString()+", skip:"+testResult1.result.skipCount.toString()) 

// if no pass, no fail all skip then set result to unstable 
if (testResult1.result.passCount == 0 && testResult1.result.failCount == 0 && testResult1.result.skipCount > 0) { 
    currentBuild.result = hudson.model.Result.UNSTABLE 
} 

currentBuild.setDescription(currentBuild.getDescription() + "\n" + currentBuild.result.toString()) 

def ws = manager.build.workspace.getRemote() 
myFile = new File(ws + "/VERSION.txt") 
desc = myFile.readLines() 
currentBuild.setDescription(currentBuild.getDescription() + "\n" + desc)