无法在Jenkins Pipeline中显示JUnit测试结果

zte4gxcn  于 2022-11-02  发布在  Jenkins
关注(0)|答案(4)|浏览(272)

我有一段Jenkins管道代码,我试图在其中对我的Angular 代码运行JUnit。
如果单元测试失败,Jenkins必须停止管道。它正在工作,但我无法看到“最新测试结果”和“测试结果趋势”
我使用的是Jenkins 2.19.1、Jenkins Pipeline 2.4和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
        }
    }

你知道我做错了什么吗?

jbose2ul

jbose2ul1#

如果使用声明性管道,则可以执行以下操作:

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

这也可以用于html发布或任何东西,不需要finally/catch等。它将始终存档结果。
请访问https://jenkins.io/doc/book/pipeline/syntax/#declarative-pipeline了解更多信息。
如果有一个 clean 目标导致没有测试输出:

post {
    always {
      junit(
        allowEmptyResults: true,
        testResults: '**/test-reports/*.xml'
      )
    }
xmjla07d

xmjla07d2#

用于发布Gradle构建生成的JUnit风格测试结果的Jenkins Pipeline步骤:

stage('Publish test results') {
      steps {
          junit '**/test-results/test/*.xml'
      }
  }
vbopmzt1

vbopmzt13#

我想我之前尝试做的方式是错误的。我已经改变了我的代码,如下所示,它的工作:

{
        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"
            ])
        }
    }
puruo6ea

puruo6ea4#

在您的代码中,只有当测试失败时才生成JUnit报告,这可能不是您想要的。

{
        sh("npm install -g gulp bower")
        sh("npm install")
        sh("bower install")    
        try {
            sh("gulp test")
        } finally {
            step([$class: 'JUnitResultArchiver', testResults: '**/reports/junit/*.xml', healthScaleFactor: 1.0])
            junit '**/reports/junit/*.xml'
        }
    }

我更喜欢使用finally,而不是post,因为这样,东西就在一起了。

相关问题