java - 错误 : java. io.NotSerializedException : groovy. util.slurpersupport.Attributes

标签 java groovy jenkins-pipeline jenkins-groovy

我在 Jenkinsfile 函数中使用 @NonCPS 因为我需要使用 XmlSlurper 获取 XML 上的属性,即使使用 @NonCPS 注释,我仍然收到 java.io.NotSerializedException 错误。

下面是我的代码

    @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

有人可以帮忙吗?

最佳答案

您的方法xmlCovergeParse(CoverageXml)返回不可序列化的对象

jenkins 要求管道中的所有变量均为 Serializable因为下一步可以在前一个节点之外的其他节点上执行。因此,为了在节点之间传输变量,它们将被序列化。

只需在方法中添加 returnbranchCoverages.toString() xmlCovergeParse

关于java - 错误 : java. io.NotSerializedException : groovy. util.slurpersupport.Attributes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53881133/

相关文章:

Java 从字体中获取 ASCII 字符集并在白色背景上分别绘制每个字符?

java - 创建一个发送到后台并关闭的 bat 文件(1 个文件)

grails - 在Groovy Source文件夹中使用Grails 3服务的最佳方法是什么?

groovy - 依赖于扩展对象的任务的 Gradle 插件最佳实践

Jenkins 管道可选 bool 参数

java - 软件工程面试内存分配

java - 如何在 Java 中比较字符串?

jenkins - 如何检查 node() 是否已分配

java - 我如何获取spock中设置方法中的方法?

docker - Jenkinsfile管道:从另一个访问一个Docker容器