You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins构建失败后测试报告缺失,求排查解决方法

问题分析与解决方案

你的核心问题是Jenkinsfile存在语法错误,导致测试报告归档步骤根本没被执行,所以构建失败后看不到测试报告。

具体错误点

你把Jenkins Pipeline的step(JUnitResultArchiver)指令错误地嵌套在了sh的shell命令字符串里:

// 错误写法:step被当成shell命令的一部分,Jenkins根本不会执行它
sh 'chmod +x gradlew && ./gradlew clean test step([$class: 'JUnitResultArchiver', testResults:'build/test-results/test/*.xml'])'

shell会把step([...])当成无效的shell命令,而且因为./gradlew clean test已经执行失败(5个测试全挂),shell直接返回非0退出码,Pipeline在这个sh步骤后就终止了,完全没机会处理测试报告归档。

修正后的Jenkinsfile

推荐用post块的always条件,确保无论测试成功/失败,都会归档报告,这样你能在Jenkins里直接看到失败测试的详情:

node {
    stage('Integration tests') {
        git url: "https://$autotestsGitRepo", branch: 'develop', credentialsId: gitlabCredentialsId
        // 单独执行shell命令,负责跑测试
        sh 'chmod +x gradlew && ./gradlew clean test'
    }
    // 无论构建结果如何,都执行报告归档
    post {
        always {
            step([$class: 'JUnitResultArchiver', testResults: 'build/test-results/test/*.xml'])
        }
    }
}

额外说明

  • 如果不想用post块,也可以把step指令放在sh之后,但要注意:默认情况下如果sh步骤返回失败(测试挂了),Pipeline会终止,不会执行后面的step。这种场景下可以给sh加上returnStatus: true参数,让它不终止Pipeline:
    sh returnStatus: true, script: 'chmod +x gradlew && ./gradlew clean test'
    step([$class: 'JUnitResultArchiver', testResults: 'build/test-results/test/*.xml'])
    
  • 确认测试报告路径build/test-results/test/*.xml是正确的——从你的日志来看,测试报告的HTML版本在build/reports/tests/test/,对应的XML文件路径和你写的一致,没问题。

内容的提问来源于stack exchange,提问作者Poet_peselnik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:03:55