在Jenkins管道中设置阶段状态

时间:2018-01-26 23:40:55

标签: jenkins-pipeline

在脚本管道中是否有任何方法可以将某个阶段标记为不稳定但只显示该阶段为不稳定而不将每个阶段标记为输出中的不稳定状态?

我可以这样做:

node()
{
  stage("Stage1")
  {
      // do work (passes)
  }
  stage("Stage2")
  {
      // something went wrong, but it isn't catastrophic...
      currentBuild.result = 'UNSTABLE'
  }
  stage("Stage3")
  {
      // keep going... 
  }
}

但是当我运行这个时,詹金斯将一切都标记为不稳定......但我希望在可能的情况下显示绿色的第一个和最后一个阶段,以及有问题变黄的阶段。

如果整个管道被标记为不稳定,那就没关系了,但是如果可能的话,让最后一个结果通过也可能会很好。

4 个答案:

答案 0 :(得分:3)

目前无法做到这一点,请参阅以下功能请求及其相关链接,以便讨论/推理原因。

https://issues.jenkins-ci.org/browse/JENKINS-26522

答案 1 :(得分:3)

我发现一种仅设置阶段结果但不更改构建结果的优雅方式是:

catchError(stageResult: 'UNSTABLE', buildResult: currentBuild.result) {
     error 'example of throwing an error'
}

答案 2 :(得分:2)

还值得一提的是warnErrorunstable步骤,它们已作为“ Jenkins Pipeline Stage Result Visualization Improvements”的一部分于2019年7月发布。

它们的目的是允许您将阶段标记为不稳定(显示为琥珀色警告图标,而不是红色错误图标),而其余版本仍标记为成功。

示例(从上面的链接中摘录):

warnError的行为类似于catchError,如果该块的任何部分失败,则更改阶段以发出警告:

warnError('Script failed!') {
  sh('false')
}

unstable是指令式步骤,可用于将当前阶段标记为不稳定阶段:

try {
  sh('false')
} catch (ex) {
  unstable('Script failed!')
}

答案 3 :(得分:1)

现在可以:

pipeline {
    agent any
    stages {
        stage('1') {
            steps {
                sh 'exit 0'
            }
        }
        stage('2') {
            steps {
                catchError(buildResult: 'SUCCESS', stageResult: 'UNSTABLE') {
                    sh "exit 1"
                }
            }
        }
        stage('3') {
            steps {
                sh 'exit 0'
            }
        }
    }
}

在上面的示例中,所有阶段都将执行,管道将成功,但是阶段2将显示为不稳定。我在示例中使用了声明性管道,但是在脚本化管道中应该可以使用相同的内容。

您可能已经猜到了,可以将buildResultstageResult随意更改为任意组合。您甚至可以使构建失败并继续执行管道。

只需确保您的Jenkins是最新的,因为这是一个相当新的功能。