Je veux obtenir une construction "UNSTABLE" au lieu de
//currentBuild.result='UNSTABLE'
stage 'Publish Reports'
allowMissing: false
])
}
Quelqu'un peut-il me donner une solution ?
Je veux obtenir une construction "UNSTABLE" au lieu de
//currentBuild.result='UNSTABLE'
stage 'Publish Reports'
allowMissing: false
])
}
Quelqu'un peut-il me donner une solution ?
Si mvn test
échoue, il renvoie un code de sortie non nul. Dans ce cas, le sh
l'étape lance un AbortException
avec "script returned exit code X", provoquant l'arrêt de l'exécution du Pipeline, et étant marqué comme FAILURE.
Ainsi, vous devez trouver la configuration Maven qui renvoie le code de sortie 0
même en cas d'échec des tests. Le pipeline se poursuivra alors et vous pourrez analyser les résultats du test.
Ou bien, vous pouvez vérifier le code de sortie vous-même, en supposant par exemple que Maven renvoie un code de sortie 123
pour indiquer les échecs du test :
// Attempt to execute the tests
int exitCode = sh script: 'mvn test', returnStatus: true
// Check whether testing succeeded, or a known failure code was returned
if (exitCode == 0 || exitCode == 123) {
// Attempt to parse the test results, if they exist
junit '**/test-results-dir/TEST-*.xml'
// At this point, the pipeline will have been marked as 'UNSTABLE',
// assuming that parsing the results found at least one test failure
} else {
// Something unexpected happened (e.g. compile failure); stop pipeline.
// This will cause the pipeline to be marked as 'FAILURE'
error("Testing failed with exit code ${exitCode}.")
}
Ce qui suit fonctionne, mais il doit y avoir une meilleure solution. Je suis assez déçu par la prise en charge des pipelines dans la version 2.19.2 de Jenkins, elle semble un peu en demi-teinte.
def runTests() {
setTestStatus(sh (returnStatus: true, script: 'mvn clean test'))
}
@NonCPS
def setTestStatus(testStatus) {
if (testStatus == 0) {
currentBuild.result = 'SUCCESS'
} else {
def testResult = currentBuild.rawBuild.getAction(hudson.tasks.junit.TestResultAction.class)
currentBuild.result = (testResult != null && testResult.failCount > 0) ? 'UNSTABLE' : 'FAILURE'
}
}
J'obtiens exactement le même comportement en utilisant le junit
et l'option Maven -Dmaven.test.failure.ignore=true
.
Voici un exemple tiré de mon fichier Jenkins :
stage('Build') {
...
// Run Maven build and don't fail on errors
withMaven(
maven: 'Maven3',
mavenSettingsConfig: 'provided-config-file') {
sh "mvn clean install -Dmaven.test.failure.ignore=true"
}
// publish test results
junit '**/target/surefire-reports/*.xml'
}
El -Dmaven.test.failure.ignore=true
permet à Maven de retourner 0 si les tests ont échoué, au lieu de 1.
Si le code de retour d'une commande exécutée avec sh
est différent de 0, l'état de la construction est défini comme suit FAILED
et la construction s'arrête.
Avec cette option, Maven renvoie 0 si les tests ont échoué, et la construction passe à l'étape suivante.
El junit
archive les résultats des tests, et définit l'état de la construction comme suit UNSTABLE
si certains tests ont échoué.
Avez-vous essayé d'utiliser ce drapeau ?
-DtestFailureIgnore=true
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.