Jenkins 不稳定的构建带有不稳定的
我想要一个“不稳定”的构建,而不是Jenkins 不稳定的构建带有不稳定的,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,我想要一个“不稳定”的构建,而不是 //currentBuild.result='UNSTABLE' stage 'Publish Reports' allowMissing: false ]) } 谁能给我一个解决方案。如果mvn测试失败,它将返回一个非零退出代码。在这种情况下,sh步骤抛出带有“脚本返回退出代码X”的AbortException,导致管道停止执行,并被标记为失败 因此,您需要找到返回退出代码0的Maven配置,即使存在测试失败。然
//currentBuild.result='UNSTABLE'
stage 'Publish Reports'
allowMissing: false
])
}
谁能给我一个解决方案。如果
mvn测试失败,它将返回一个非零退出代码。在这种情况下,sh
步骤抛出带有“脚本返回退出代码X”的AbortException
,导致管道停止执行,并被标记为失败
因此,您需要找到返回退出代码0
的Maven配置,即使存在测试失败。然后管道将继续,您可以解析测试结果
或者,您可以自己检查退出代码,例如,假设Maven返回一个退出代码123
,表示测试失败:
//尝试执行测试
int exitCode=sh脚本:“mvn测试”,返回状态:true
//检查测试是否成功,或者是否返回了已知的故障代码
if(exitCode==0 | | exitCode==123){
//尝试分析测试结果(如果存在)
junit'**/test results dir/test-*.xml'
//此时,管道将被标记为“不稳定”,
//假设分析结果发现至少一个测试失败
}否则{
//发生意外情况(例如编译失败);停止管道。
//这将导致管道标记为“故障”
错误(“测试失败,退出代码为${exitCode}”)
}
以下方法可行,但必须有更好的解决方案。到目前为止,我对Jenkins 2.19.2上的管道支持非常失望,感觉有点不成熟
def runTests(){
setTestStatus(sh(returnStatus:true,脚本:'mvn clean test'))
}
@非现金
def setTestStatus(测试状态){
如果(testStatus==0){
currentBuild.result='SUCCESS'
}否则{
def testResult=currentBuild.rawBuild.getAction(hudson.tasks.junit.TestResultAction.class)
currentBuild.result=(testResult!=null&&testResult.failCount>0)?“不稳定”:“失败”
}
}
您是否尝试过使用
我使用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
您的解决方案无法工作,因为正如您所提到的,如果执行mvn测试失败,将抛出AbortException
,因此您的exitCode
测试无法访问。@Pom12如果您使用returnStatus
标志,则不会。从文档中可以看出:“通常情况下,带有非零状态代码的脚本将导致步骤失败并出现异常。如果选中此[returnStatus]选项,则步骤的返回值将改为状态代码。”我不知道,感谢您提供的提示:)
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'
}