如何获取管道中特定阶段的状态

Yas*_*ash 5 jenkins jenkins-cli jenkins-pipeline

我们如何获取 Jenkins 管道中前一阶段的状态。例如:我的示例管道如下:

pipeline {
    agent
    {
        node {
                label 'master'
                customWorkspace "${env.JobPath}"
              }
    }

    stages 
    {
        stage('Start') {
            steps {
                sh 'ls'
            }
        }

        stage ('set_env') {
            steps {
                // script to set environment.
            }
        }

        stage ('Build') {
            steps {
                // script to build.
            }
        }

        stage ('Send_mail') {
            steps {
                // script to send mail.
            }
        }

        stage('End') {
            steps {
                sh 'ls'
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如何获取管道中特定阶段的状态。例如:我想根据“构建”阶段是成功还是失败来做出某些决定。

是否有任何跟踪每个阶段状态的环境变量,或者有一个 Jenkins REST API 可以帮助我实现这一目标。

谢谢!

fis*_*x01 1

Jenkins 声明性管道是在前詹金斯管道方法之上的固执己见的语法。这意味着您还可以将詹金斯声明性管道视为具有额外语法糖的常规脚本。这样你就可以自由地使用变量了。正如我在上面的评论中提到的,您可以通过设置整个作业状态currentBuild.result,但如果您想在阶段之间的同一作业中做出决策:只需使用常规变量来指示前一阶段的状态即可。以你的例子为例:

pipeline {

    def didSucceed = true

    agent
    {
        node {
                label 'master'
                customWorkspace "${env.JobPath}"
              }
    }

    stages 
    {
        stage('Start') {
            steps {
                sh 'ls'
            }
        }

        stage ('set_env') {
            steps {
                // script to set environment.
                didSucceed = true // Here you indicate whether stuff actually worked..
            }
        }

        stage ('Build') {
            steps {
                if (didSucceed) {
                    // script to build.
                } else {
                    // Procedure in case of previous error..
                }
            }
        }

        stage ('Send_mail') {
            steps {
                // script to send mail.
            }
        }

        stage('End') {
            steps {
                sh 'ls'
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

您还可以使用when语句与布尔变量结合使用更具声明性的方式。