Ошибка: 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
Кто-нибудь может помочь?
1 ответ
Решение
Ваш метод xmlCovergeParse(CoverageXml)
возвращает не сериализуемый объект
jenkins требует, чтобы все переменные в конвейере были Serializable, потому что следующий шаг может быть выполнен на другом узле, чем предыдущий. поэтому для передачи переменных между узлами они будут сериализованы.
просто добавь return branchCoverages.toString()
в вашем методе xmlCovergeParse