J'ai un morceau de code de pipeline Jenkins dans lequel j'essaie d'exécuter JUnit sur mon code angulaire.
Si les tests unitaires échouent, Jenkins doit arrêter le pipeline . Cela fonctionne sauf que je ne parviens pas à voir "Résultat du dernier test" et "Tendance des résultats du test"
J'utilise Jenkins 2.19.1, Jenkins Pipeline 2.4 et Junit 1.19
{
sh("npm install -g gulp bower")
sh("npm install")
sh("bower install")
try {
sh("gulp test")
} catch (err) {
step([$class: 'JUnitResultArchiver', testResults: '**/reports/junit/*.xml', healthScaleFactor: 1.0])
junit '**/reports/junit/*.xml'
if (currentBuild.result == 'UNSTABLE')
currentBuild.result = 'FAILURE'
throw err
}
}
Any idea what I am doing wrong?
Pour votre information, si vous utilisez un pipeline déclaratif, vous pouvez faire quelque chose comme:
pipeline {
agent any
stages {
stage('Build and Test') {
steps {
sh 'build here...'
sh 'run tests here if you like ...'
}
}
}
post {
always {
junit '**/reports/junit/*.xml'
}
}
}
Cela pourrait également fonctionner avec la publication HTML ou quoi que ce soit, pas besoin de finally/catch, etc., il archivera toujours les résultats.
voir https://jenkins.io/doc/book/pipeline/syntax/#declarative-pipeline pour plus
Je pense que la façon dont j'essayais de faire précédemment était fausse. J'ai changé mon code comme ci-dessous et cela fonctionne:
{
sh("npm install -g gulp bower")
sh("npm install")
sh("bower install")
try {
sh("gulp test")
} catch (err) {
if (currentBuild.result == 'UNSTABLE')
currentBuild.result = 'FAILURE'
throw err
} finally {
step([$class: 'JUnitResultArchiver', testResults: '**/reports/junit/*.xml', healthScaleFactor: 1.0])
publishHTML (target: [
allowMissing: false,
alwaysLinkToLastBuild: false,
keepAll: true,
reportDir: 'coverage',
reportFiles: 'index.html',
reportName: "Junit Report"
])
}
}
Jenkins Pipeline pour la publication des résultats de tests de type JUnit produits par a Gradle build :
stage('Publish test results') {
junit '**/test-results/test/*.xml'
}