在Jenkins Pipelines中设置舞台状态

TxA*_*G98 9 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... 
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我运行此命令时,詹金斯将所有内容都标记为不稳定...但是我希望在可能的情况下,第一个和最后一个阶段显示绿色,而只有一个阶段变成黄色。

可以将整个管道标记为不稳定是可以的,但是也可以在骑行的后期进行一个阶段,并尽可能设置最终结果通过,这也可能很好。

Eri*_*k B 8

现在可以这样:

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'
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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


Sha*_*mer 8

另外值得一提的是2019 年 7 月发布的warnErrorunstable步骤,作为“ Jenkins 管道阶段结果可视化改进”的一部分。

它们旨在允许您将阶段标记为不稳定(这显示为琥珀色警告图标,而不是红色错误图标),而构建的其余部分仍标记为成功。

示例(从上面的链接中提取):

warnError作用类似于catchError,并在块的任何部分失败时更改阶段以发出警告:

warnError('Script failed!') {
  sh('false')
}
Run Code Online (Sandbox Code Playgroud)

unstable 是一个指令样式的步骤,您可以使用它来将当前阶段标记为不稳定:

try {
  sh('false')
} catch (ex) {
  unstable('Script failed!')
}
Run Code Online (Sandbox Code Playgroud)

  • “unstable”也标志着构建不稳定,而不仅仅是阶段。与“warnError”相同。 (4认同)

Kra*_*rac 5

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

catchError(stageResult: 'UNSTABLE', buildResult: currentBuild.result) {
     error 'example of throwing an error'
}
Run Code Online (Sandbox Code Playgroud)

  • catchError(stageResult: 'UNSTABLE', buildResult: null) 可以做完全相同的事情 (5认同)