我希望得到一个"不稳定"而不是
//currentBuild.result='UNSTABLE'
stage 'Publish Reports'
allowMissing: false
])
}
任何人都可以给我一个解决方案。
答案 0 :(得分:2)
如果mvn test
失败,它将返回非零退出代码。在这种情况下,sh
步骤会抛出AbortException
“脚本返回退出代码X”,导致管道停止执行,并被标记为FAILURE。
因此,即使存在测试失败,您也需要找到返回退出代码0
的Maven配置。然后管道将继续,您可以解析测试结果。
或者,您可以自行检查退出代码,例如假设Maven返回退出代码123
来表示测试失败:
// Attempt to execute the tests
int exitCode = sh script: 'mvn test', returnStatus: true
// Check whether testing succeeded, or a known failure code was returned
if (exitCode == 0 || exitCode == 123) {
// Attempt to parse the test results, if they exist
junit '**/test-results-dir/TEST-*.xml'
// At this point, the pipeline will have been marked as 'UNSTABLE',
// assuming that parsing the results found at least one test failure
} else {
// Something unexpected happened (e.g. compile failure); stop pipeline.
// This will cause the pipeline to be marked as 'FAILURE'
error("Testing failed with exit code ${exitCode}.")
}
答案 1 :(得分:1)
以下工作,但必须有一个更好的解决方案。到目前为止,我对Jenkins 2.19.2的管道支持感到非常失望,感觉有点半了。
def runTests() {
setTestStatus(sh (returnStatus: true, script: 'mvn clean test'))
}
@NonCPS
def setTestStatus(testStatus) {
if (testStatus == 0) {
currentBuild.result = 'SUCCESS'
} else {
def testResult = currentBuild.rawBuild.getAction(hudson.tasks.junit.TestResultAction.class)
currentBuild.result = (testResult != null && testResult.failCount > 0) ? 'UNSTABLE' : 'FAILURE'
}
}
答案 2 :(得分:1)
我使用junit
步骤和Maven选项-Dmaven.test.failure.ignore=true
实现完全相同的行为。
以下是我Jenkins文件的一个例子:
stage('Build') {
...
// Run Maven build and don't fail on errors
withMaven(
maven: 'Maven3',
mavenSettingsConfig: 'provided-config-file') {
sh "mvn clean install -Dmaven.test.failure.ignore=true"
}
// publish test results
junit '**/target/surefire-reports/*.xml'
}
-Dmaven.test.failure.ignore=true
选项使Maven在测试失败时返回0,而不是1.
如果使用sh
运行的命令的返回代码与0不同,则构建状态将设置为FAILED
,并且构建将停止。
使用此选项,如果测试失败,Maven将返回0,因此构建将继续进行下一步。
junit
步骤归档测试结果,如果某些测试失败,则将构建状态设置为UNSTABLE
。
答案 3 :(得分:0)
您是否尝试过使用this flag?
-DtestFailureIgnore=true