我有一段Jenkins管道代码,我试图在我的角度代码上运行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
}
}
Any idea what I am doing wrong?
答案 0 :(得分:15)
仅供参考,如果您使用声明性管道,您可以执行以下操作:
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了解更多
答案 1 :(得分:2)
我认为我之前尝试做的方式是错误的。我已经改变了我的代码,如下所示:
{
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"
])
}
}
答案 2 :(得分:1)
Jenkins管道步骤,用于发布由 Gradle构建产生的JUnit风格的测试结果:
stage('Publish test results') {
junit '**/test-results/test/*.xml'
}