Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jenkins管道触发作业并在后期操作中获得可用结果_Jenkins_Jenkins Pipeline_Jenkins Plugins_Jenkins Groovy - Fatal编程技术网

Jenkins管道触发作业并在后期操作中获得可用结果

Jenkins管道触发作业并在后期操作中获得可用结果,jenkins,jenkins-pipeline,jenkins-plugins,jenkins-groovy,Jenkins,Jenkins Pipeline,Jenkins Plugins,Jenkins Groovy,我有一个可以触发另一项工作的管道。我想得到触发作业的结果,并在后期操作中使用它。我正在这样做: stage('Stage 1') { steps{ script { echo "Trigger another job" jobResult = build job:

我有一个可以触发另一项工作的管道。我想得到触发作业的结果,并在后期操作中使用它。我正在这样做:

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()
                            
                        }
                    }
                }
            }
当触发的作业成功时,一切正常,但当作业失败时,我得到一个错误: 执行always post条件时出错: groovy.lang.MissingPropertyException:没有这样的属性:类的jobResult:groovy.lang.Binding
如何解决这个问题?

您可以声明一个全局变量并设置该值,以便在任何地方都可以访问它。您的问题是
jobResult
不在后期阶段的范围内

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 将返回一个包含大量信息的jsonobject,其中一个是结果


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

仅适用于像我这样不知道全局变量应该声明在何处的人,全局变量应该在管道{}标签之前声明,而不是直接在stage()之前声明是,你完全正确。也许我应该加上,对不起