Jenkins管道发送电子邮件错误“;java.lang.NullPointerException“;

Jenkins管道发送电子邮件错误“;java.lang.NullPointerException“;,jenkins,jenkins-pipeline,jenkins-groovy,Jenkins,Jenkins Pipeline,Jenkins Groovy,我正在集成Squish自动化工具和Jenkins管道。一切进展顺利。现在我需要在工作完成后发送电子邮件报告。我在pre-send脚本中有一个Groovy文件,但当该脚本运行时,它抛出异常: java.lang.NullPointerException:无法对null对象调用方法getRootDir() 我发现Groovy脚本中的“build”对象为Null。不知道为什么。请注意,如果我在Jenkins上使用内置的Squish插件和可编辑的电子邮件,一切都会顺利进行。当我开始使用管道时,问题就发生

我正在集成Squish自动化工具和Jenkins管道。一切进展顺利。现在我需要在工作完成后发送电子邮件报告。我在pre-send脚本中有一个Groovy文件,但当该脚本运行时,它抛出异常:

java.lang.NullPointerException:无法对null对象调用方法getRootDir()

我发现Groovy脚本中的“build”对象为Null。不知道为什么。请注意,如果我在Jenkins上使用内置的Squish插件和可编辑的电子邮件,一切都会顺利进行。当我开始使用管道时,问题就发生了

@@@-这是我的Groovy脚本:

List getJenkinsTestResultFiles() {
    File squishResultsPath = new File( build.getRootDir(), "squishResults" )
    if ( !squishResultsPath.exists() || !squishResultsPath.isDirectory() ) {
       throw new GroovyRuntimeException( "Squish results path does not exist at: " + squishResultsPath.getAbsolutePath() )
    }


    File summaryFile = new File( squishResultsPath, "summary.xml" )
    if ( !summaryFile.exists() || !summaryFile.isFile() ) {
        throw new GroovyRuntimeException( "Squish summary file does not exist at: " + summaryFile.getAbsolutePath() )
    }

    List resultFiles = []
    def summaries = new XmlSlurper().parse( summaryFile )
    summaries.summary.each {
        resultFiles.push( new File( squishResultsPath, it.xmlFileName.text() ) )
    }

    return resultFiles
}
@@@-这是我的管道脚本:

node('Slave_10.133.88.151') {

    stage('Squish Test') {
        step([$class: 'SquishBuilder',
            abortBuildOnError: false,
            extraOptions: '',
            host: '',
            port: '',
            resultFolder: "${WORKSPACE}\\Squish_Report",
            skipTestCases: false,
            snoozeFactor: '1',
            squishConfig: 'Default',
            testCase: '',
            testSuite: "${WORKSPACE}\\${TEST_SUITE}"])
    } 

    stage('Send Email') {
        emailext body: 'Test', 
        postsendScript: '${SCRIPT, template="SquishSummary.groovy"}', 
        subject: 'Pipeline', 
        to: 'hoang@local.com'
    }

}

build对象是一个hudson.model.build对象,由于您正在调用一个共享库,因此必须在groovy脚本中导入build对象

import hudson.model.Build
在共享库的顶部


如果您已经导入了对象,那么问题可能是您没有在共享库中初始化它

build对象是hudson.model.build对象,由于您调用的是共享库,因此必须在groovy脚本中导入build对象

import hudson.model.Build
在共享库的顶部


如果您已经导入了对象,那么问题可能是您没有在共享库中初始化它

嗨,Gavsuk,谢谢你的回复。我发现语句“build.getRootDir()”中的变量“build”无效。我们应该改为“run.getRootDir()”,这已经在Wiki页面中提到了,但我没有看到。嗨,gavsyuk,谢谢你的回复。我发现语句“build.getRootDir()”中的变量“build”无效。我们应该改为“run.getRootDir()”,这在Wiki页面中已经提到了,但我没有看到。