Jenkins 管道触发作业并在 post 操作中获取可用结果

Jenkins pipeline trigger job and get results available in post operation

我有一个带有触发另一个作业的阶段的管道。我想获取触发作业的结果并将其用于 post 操作。我正在这样做:

stage('Stage 1') {
                steps{
                    script {
                        echo "Trigger another job"
                            jobResult = build job:
                            'urltojob',
                                parameters: [
                                    ],
                                    wait: true,
                                    propagate: true;
                    }
                }
                post {
                    always {
                        script {

                            echo jobResult.getResult()
                            echo jobResult.getAbsoluteUrl()
                            echo jobResult.getDurationString()
                            
                        }
                    }
                }
            }

当触发的作业成功时,一切正常,但当作业失败时,我得到一个错误: 执行始终post条件时出错: groovy.lang.MissingPropertyException:没有 属性:class 的工作结果:groovy.lang.Binding 我该如何解决?

您可以声明一个全局变量并设置值,这样您就可以在任何地方访问它。您的问题是 jobResult 不存在于您的 post-阶段的范围内。

def result // this is our global variable

pipeline {
...
stage('Stage 1') {
            steps{
                script {
                    echo "Trigger another job"
                        result = build job:
                        'urltojob',
                            parameters: [
                                ],
                                wait: true,
                                propagate: true;
                }
            }
            post {
                always {
                    script {
                        echo result.getResult()
                        echo result.getAbsoluteUrl()
                        echo result.getDurationString()
                        
                    }
                }
            }
        }

如果您只想获得结果并知道您正在执行的确切工作,您将通过 jenkins api.

获得该信息

示例 GET {baseUrl}:{port}/job/{jobName}/job/{branch}/lastBuild/api/json?pretty=true 将 return 一个包含大量信息的 jsonobject,其中之一就是结果。

您也可以对 lastBuild、lastStableBuild、lastSuccessfulBuild、lastFailedBuild、lastUnstableBuild、lastUnsuccessfulBuild、lastCompletedBuild 执行此操作。