Конвейер Jenkins отправляет сообщение об ошибке «java.lang.NullPointerException» - PullRequest
1 голос
/ 05 июня 2019

Я интегрирую инструмент автоматизации Squish и конвейер Jenkins.Все прошло гладко.Теперь мне нужно отправить отчет по электронной почте после выполнения работы.У меня есть файл Groovy в сценарии предварительной отправки, но когда этот сценарий выполняется, он выдает исключение:

java.lang.NullPointerException: Невозможно вызвать метод getRootDir () для нулевого объекта

Я обнаружил, что объект "build" в моем скрипте Groovy - это Null.Не уверен, почему это так.Обратите внимание, если я использую встроенный плагин Squish и Editable Email на Jenkins, все прошло гладко.Проблема просто возникла, когда я перешел на использование Pipeline.

@@@ - это мой скрипт 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
}

@@@ - Это мой скрипт Pipeline:

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

}

1 Ответ

0 голосов
/ 10 июня 2019

Объект сборки является объектом hudson.model.Build, и, поскольку вы вызываете разделяемую библиотеку, вам придется импортировать объект Build в свой скрипт groovy.

import hudson.model.Build

В верхней части вашей общей библиотеки.

Если вы уже импортировали объект, проблема может заключаться в том, что вы не инициализировали его внутри своей общей библиотеки.

...