如果步骤不稳定,詹金斯管道失败

时间:2016-08-02 07:09:00

标签: maven jenkins jenkins-pipeline jenkins-2

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

"//nameData/firstName/name[" + randVal + "]"

在此示例中,作业Unit-Test的结果不稳定,但在管道中显示为失败。

如何更改jobs / pipeline / jenkins以使(1)管道步骤不稳定而不是失败,以及(2)管道状态不稳定而不是失败。

我尝试添加node { stage 'Unit/SQL-Tests' parallel ( phase1: { build 'Unit-Tests' }, // maven phase2: { build 'SQL-Tests' } // shell ) stage 'Integration-Tests' build 'Integration-Tests' // maven } 参数MAVEN_OPTS,但这并没有解决问题。我不确定如何将-Dmaven.test.failure.ignore=true包装成一些可以捕获并处理结果的逻辑。

使用this logic添加子管道并不起作用,因为没有从subversion签出的选项(该选项在常规maven作业中可用)。如果可能的话,我不想使用命令行结帐。

2 个答案:

答案 0 :(得分:18)

经验教训:

  • Jenkins将根据currentBuild.result值继续更新管道,该值可以是SUCCESSUNSTABLEFAILUREsource)。
  • build job: <JOBNAME>的结果可以存储在变量中。构建状态位于variable.result
  • build job: <JOBNAME>, propagate: false将阻止整个构建立即失败。
  • currentBuild.result can only get worse。如果该值之前为FAILED并且通过SUCCESS收到新状态currentBuild.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'
}

答案 1 :(得分:17)

无论步骤是不稳定还是失败,您脚本中的最终构建结果都将失败。

默认情况下,您可以将传播添加到false,以避免流失。

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

在流程结束时,您可以根据“结果”变量的内容判断最终结果。

例如

currentBuild.result='UNSTABLE'

这是一个详细的例子 How to set current build result in Pipeline

BR,