web-dev-qa-db-fra.com

Impossible d'afficher le résultat des tests JUnit dans le pipeline Jenkins

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?
4
Joy

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

13
Michael Neale

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"
            ])
        }
    }
1
Joy

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'
  } 
1
Alex