Jenkins:java.io.NotSerializableException:groovy.util.slurpersupport.NodeChild

时间:2016-12-15 19:05:12

标签: jenkins-pipeline jenkins-groovy

我有一个读取pom.xml文件的代码,然后尝试重新序列化并将其写回:

// Get the file raw text

def pomXMLText = readFile(pomFile)

// Parse the pom.xml file

def project = new XmlSlurper(false, false).parseText(pomXMLText)

... do some useful stuff ...

def pomFileOut = "$WORKSPACE/pomtest.xml"

def pomXMLTextOut = groovy.xml.XmlUtil.serialize(project)

println "pomXMLTextOut = $pomXMLTextOut" // <-- This line prints to updated XML
  

writeFile文件:pomFileOut,text:pomXMLTextOut //&lt; - 此行崩溃并显示帖子标题中列出的错误:java.io.NotSerializableException:groovy.util.slurpersupport.NodeChild

我已经尝试将pomXMLTextOut变量转换为String。我尝试应用.text()方法,该方法获得了jenkins沙箱安全性错误。有没有其他人能够从Jenkins管道中运行的groovy脚本成功编写XML文件?

顺便说一句,我还尝试过使用File对象,但是这并不能在jenkins节点之间进行远程处理。只要作业总是在master上运行,它就可以工作。

1 个答案:

答案 0 :(得分:0)

您可以尝试@NonCPS注释并在这样的函数中关闭那些不可序列化的对象

@NonCPS
def writeToFile(String text) {
    ...
}

以下是Pipeline groovy plugin

的解释
  

@NonCPS方法可以安全地将非Serializable对象用作本地对象   变量