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
相关产品推荐
相关产品推荐

