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'
}