【问题标题】:How to mark whole Jenkins pipeline build as SUCCESS, after a stage fails and the remaining stages don't run?在一个阶段失败并且其余阶段不运行后,如何将整个 Jenkins 管道构建标记为成功?
【发布时间】:2021-09-06 09:17:42
【问题描述】:

我的第一阶段运行一个 shell 脚本。退出 0 将其标记为成功,退出 1 将其标记为失败。如何将此结果读入管道并获得所需的行为:

  • 运行阶段 1
  • 如果第 1 阶段失败,则不要运行其余阶段,而是将整个管道标记为成功
  • 如果第 1 阶段成功,则运行其余阶段
  • 如果其中任何一个失败,则将管道标记为失败
  • 如果都成功,则将管道标记为成功

我在声明式管道中执行此操作,如何强制执行此行为?

【问题讨论】:

    标签: jenkins jenkins-pipeline


    【解决方案1】:

    你可以使用这样的东西,捕捉错误,然后改变 currentBuild 结果:

    pipeline {
        agent any
        stages {
            stage('Stage 1') {
                steps {
                    script {
                        try {
                            // do something that fails
                            sh "exit 1"
                        } catch (Exception err) {
                            currentBuild.result = 'SUCCESS'
                        }
                    }
                }
            }
            stage('Stage 2') {
                steps {
                    echo "Stage 2"
                }
            }
            stage('Stage 3') {
                steps {
                    echo "Stage 3"
                }
            }
        }
    }
    

    如果您需要更改特定阶段的结果,请查看 this link 并解释如何执行它。

    【讨论】:

    • 是的,它做到了。我定义了一个布尔变量,它最初设置为 true,在“catch”语句中我将其设置为 false。然后在失败时需要跳过的所有阶段都用“when {expression {}}”语句标记。谢谢!
    • 是的,可以选择需要跳过的阶段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    相关资源
    最近更新 更多