java - 错误:java.io.NotSerializableException:groovy.util.slurpersupport.Attributes
问题描述
我在我的 Jenkinsfile 函数中使用 @NonCPS 因为我需要使用 XmlSlurper 获取 XML 的属性,即使使用 @NonCPS 注释我仍然会收到 java.io.NotSerializableException 错误。
跟随是我的代码
@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 要求管道中的所有变量都是可序列化的,因为下一步可以在前一个节点之外的其他节点上执行。因此要在节点之间传输变量,它们将被序列化。
只需添加return branchCoverages.toString()
您的方法xmlCovergeParse
推荐阅读
- ibm-watson - 在 Watson Visual Recognition 上训练模型
- python - 与重复计时器一起使用时,Python OpenCV imshow 冻结
- python - 从 LinkedIn 网络抓取公司详细信息 --- 无法在内部获取正文标签
- postgresql - 如何使用 docker-compose 设置 postgres 的服务器名称?
- java - 如何在 Javascript 弹出窗口中输入凭据?我们无法通过链接中的凭据
- android - 在 Firebase 数据库中读取孩子
- c++ - QTCreator 无规则
- vba - Word 宏状态栏消息消失
- sed - 在第二次出现字符串后删除所有内容
- python - 使用 gitlab runner 通过 webdav 访问 Nextcloud 的问题