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

时间:2017-09-08 09:45:43

标签: jenkins jenkins-pipeline jenkins-cli

我们如何在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'
            }
        }
    }
}

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

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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'
            }
        }
    }
}

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