Ошибка: java.io.NotSerializableException: groovy.util.slurpersupport.Attributes

Я использую @NonCPS в своей функции Jenkinsfile. Поскольку мне нужно получить атрибуты в XML, используйте XmlSlurper, и я все еще получаю ошибку java.io.NotSerializableException даже с аннотацией @NonCPS.

Следуй мой код

    @Field prBranchCoverage
    @NonCPS
def xmlCovergeParse(CoverageXml) {
    println "start coverage"
    def prParser = new XmlSlurper()
    prParser.setFeature("http://apache.org/xml/features/disallow-doctype-decl", false) 
    prParser.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
    def prCovergeDoc = prParser.parseText(CoverageXml)
    def branchCoverage = prCovergeDoc['@line-rate']
    return branchCoverages
}
stage('Pr coverage ') {
                sh "mvn -V -B -U cobertura:cobertura -PcodehausCoverage -Dmaven.test.failure.ignore=true -DskipWeaving=true test"
        publishTestResults cobertura: [archive: true,pattern: "**/target/site/cobertura/coverage.xml"]
        def CoverageXml = readFile file: './target/site/cobertura/coverage.xml'
        def prBranchCoverage = xmlCovergeParse(CoverageXml)
        echo "start coverage"

        println prBranchCoverage

            }

Я получаю ошибку:

Error: java.io.NotSerializableException: groovy.util.slurpersupport.Attributes
an exception which occurred:
    in field com.cloudbees.groovy.cps.impl.BlockScopeEnv.locals
    in object com.cloudbees.groovy.cps.impl.BlockScopeEnv@72e69aed
    in field com.cloudbees.groovy.cps.impl.CallEnv.caller
    in object com.cloudbees.groovy.cps.impl.FunctionCallEnv@1a22d024
    in field com.cloudbees.groovy.cps.Continuable.e

Может ли кто-нибудь помочь в этом?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
1 099
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

ваш метод xmlCovergeParse(CoverageXml) возвращает несериализуемый объект

jenkins требует, чтобы все переменные в конвейере были Сериализуемый, потому что следующий шаг может быть выполнен на другом узле, а не на предыдущем. поэтому для передачи переменных между узлами они будут сериализованы.

просто добавьте return branchCoverages.toString() в свой метод xmlCovergeParse

Другие вопросы по теме