2015-02-23 19 views
38

Utilizzo Jenkins, Maven 3.1 e Java 1.6. Ho il seguente lavoro Maven istituito nel Jenkins con i seguenti obiettivi e le opzioni ...Come faccio a far fallire Jenkins quando i test dell'unità Maven falliscono?

clean install -U -P cloudbees -P qa 

di seguito è il mio pom.xml configurazione infallibile ...

<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> 

Tuttavia, quando mio test di unità fallire, l'output della console Jenkins dice ancora "BUILD SUCCESS" e la build è contrassegnata come "unstable" invece di fallire completamente. Come posso configurare le cose in Jenkins (o Maven se è quello che risulta essere) in modo che la mia build fallisca (non diventa instabile o passa) se uno qualsiasi dei test unitari fallisce?

Qui di seguito è ciò che l'output della console dice

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 

risposta

38

È possibile aggiungere -Dmaven.test.failure.ignore=false al MAVEN_OPTS se si fa clic sul pulsante Avanzate nella sezione Costruisci della vostra Jenkins Job.

Vedere Maven Surefire Plugin - surefire:test opzioni di riferimento.

+2

Ma dobbiamo davvero specificare questo flag come falso? Secondo la mia comprensione se non si specifica questo appartamento, il valore predefinito è "FALSE". Si prega di suggerire. Grazie! – OverrockSTAR

+9

Jenkins specifica questo valore su true per impostazione predefinita. Dai un'occhiata a https://issues.jenkins-ci.org/browse/JENKINS-24655 – Torsten

+0

Grazie, sei corretto. Ha funzionato per me! – OverrockSTAR

5

Usa Text Finder plugin. Configurarlo per cercare There are test failures e declassare la build per FAILED

+2

Bel compromesso, ma un trucco ancora. – Alexey

+0

Oltre a essere un hack, ho trovato che non è riuscito a eseguire il downgrade di UN UNSTABLE a un build FAILED per me. Ho pensato che potrebbe essere qualcosa a che fare con il documentato "la riclassificazione si applica solo a build che hanno restituito uno stato di uscita generale pari a zero". – bdeniker

0

Un altro trucco che può essere utile è usare groovy post-build per controllare e impostare il risultato del test.

ad es. questo groovy ottiene il risultato della build, aggiunge elementi utili alla descrizione della build e imposta il risultato di build su UNSTABLE nel caso in cui non ci siano passaggi o fallimenti ma tutti i test vengano saltati.

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) 
Problemi correlati