21

目前,当 maven-job 不稳定(黄色)时,我的管道失败(红色)。

node {
    stage 'Unit/SQL-Tests'
    parallel (
       phase1: { build 'Unit-Tests' }, // maven
       phase2: { build 'SQL-Tests' } // shell
    )
    stage 'Integration-Tests'
    build 'Integration-Tests' // maven
}

在此示例中,作业单元测试的结果不稳定,但在管道中显示为失败。

如何更改作业/管道/詹金斯以使(1)管道步骤不稳定而不是失败,以及(2)管道的状态不稳定而不是失败。

我尝试添加MAVEN_OPTS参数-Dmaven.test.failure.ignore=true,但这并没有解决问题。我不确定如何将其包装build 'Unit-Test'成一些可以捕获和处理结果的逻辑。

添加具有此逻辑的子管道并不能解决问题,因为没有从 subversion 签出的选项(该选项在常规 maven 作业中可用)。如果可能,我不想使用命令行结帐。

4

2 回答 2

31

得到教训:

  • currentBuild.resultJenkins 将根据可以是SUCCESSUNSTABLE( FAILUREsource )的值不断更新管道。
  • 的结果build job: <JOBNAME>可以存储在变量中。构建状态为 in variable.result
  • build job: <JOBNAME>, propagate: false将防止整个构建立即失败。
  • currentBuild.result 只能变得更糟。如果该值以前是并且通过它FAILED接收新状态将保持SUCCESScurrentBuild.result = 'SUCCESS'FAILED

这是我最终使用的:

    node {
        def result  // define the variable once in the beginning
        stage 'Unit/SQL-Tests'
        parallel (
           phase1: { result = build job: 'Unit', propagate: false }, // might be UNSTABLE
           phase2: { build 'SQL-Tests' }
        )
        currentBuild.result = result.result  // update the build status. jenkins will update the pipeline's current status accordingly
        stage 'Install SQL'
        build 'InstallSQL'
        stage 'Deploy/Integration-Tests'
        parallel (
           phase1: { build 'Deploy' },
           phase2: { result = build job: 'Integration-Tests', propagate: false }
        )
        currentBuild.result = result.result // should the Unit-Test be FAILED and Integration-Test SUCCESS, then the currentBuild.result will stay FAILED (it can only get worse)
        stage 'Code Analysis'
        build 'Analysis'
    }
于 2016-08-03T06:10:52.933 回答
21

无论步骤是 UNSTABLE 还是 FAILED,您的脚本中的最终构建结果都将是 FAILED。

您可以默认将传播添加到 false 以避免流失败。

def result = build job: 'test', propagate: false

在流程结束时,您可以根据从“结果”变量中获得的结果来判断最终结果。

例如

currentBuild.result='UNSTABLE'

这是一个详细示例 如何在管道中设置当前构建结果

溴,

蒂姆

于 2016-08-02T11:30:22.273 回答