不稳定的构建与不稳定的

时间:2016-09-29 07:35:27

标签: jenkins jenkins-pipeline

我希望得到一个"不稳定"而不是

    //currentBuild.result='UNSTABLE'

    stage 'Publish Reports'

        allowMissing: false
    ])
}

任何人都可以给我一个解决方案。

4 个答案:

答案 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