如何在阶段并行运行期间获取失败的阶段名称?

时间:2020-10-07 14:45:57

标签: jenkins jenkins-pipeline jenkins-groovy jenkins-job-dsl

我有一个管道,其中多个阶段并行运行,但是如果任何一个阶段失败,我想获得其名称以显示失败的阶段。使用以下代码,即使它在第一阶段失败,即Checking Redmine access,也总是将最后阶段显示为失败,即Checking Reviewers list。这是因为它并行运行,并且获取了最新的赋值。

pipeline {
    agent {
        label {
            label "<machine-ip>"
            customWorkspace "workspace/RedmineAndReviewboardProject/SVNCheckoutTest"
        }
    }
    stages {
        stage('Verify inputs') {

            parallel {
                stage('Checking Redmine access') {
                    steps {
                        script {
                            FAILED_STAGE = env.STAGE_NAME
                            echo "Redmine"
                            sh'''hello'''
                        }
                    }
                }
                stage('Checking SVN access') {
                    steps {
                        script {
                            FAILED_STAGE = env.STAGE_NAME
                            echo "SVN"
                        }
                    }

                }
                stage('Checking Reviewers list') {
                    steps {
                        script {
                            FAILED_STAGE = env.STAGE_NAME
                            echo "Reviewer"
                        }
                    }
                }

            }

        }
    }
    post {
        failure {
            script {
                echo "Failed stage is " + FAILED_STAGE
            }
        }
    }
}

有什么办法可以使并行运行阶段完全失败吗?否则,如果父级名称返回为失败级,也可以。

1 个答案:

答案 0 :(得分:0)

我相信您可以在每个阶段使用post { failure {块:请参见https://www.jenkins.io/doc/book/pipeline/syntax/#post

pipeline {
    agent {
        label {
            label "<machine-ip>"
            customWorkspace "workspace/RedmineAndReviewboardProject/SVNCheckoutTest"
        }
    }
    stages {
        stage('Verify inputs') {

            parallel {
                stage('Checking Redmine access') {
                    steps {
                        script {
                            echo "Redmine"
                            sh'''hello'''
                        }
                    }
                    post {
                        failure {
                            script {
                                echo "Failed stage is ${STAGE_NAME}"
                            }
                        }
                    }
                }
                stage('Checking SVN access') {
                    steps {
                        script {
                            FAILED_STAGE = env.STAGE_NAME
                            echo "SVN"
                        }
                    }
                    post {
                        failure {
                            script {
                                echo "Failed stage is ${STAGE_NAME}"
                            }
                        }
                    }
                }
                stage('Checking Reviewers list') {
                    steps {
                        script {
                            FAILED_STAGE = env.STAGE_NAME
                            echo "Reviewer"
                        }
                    }
                    post {
                        failure {
                            script {
                                echo "Failed stage is ${STAGE_NAME}"
                            }
                        }
                    }
                }
            }
        }
    }
}