2016-12-15 283 views
1

我有一些代码在一个pom.xml文件中读取然后尝试重新序列,并将其写回:詹金斯:java.io.NotSerializableException:groovy.util.slurpersupport.NodeChild

// 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,文本:pomXMLTextOut // < - 这符合在帖子标题中列出的错误崩溃:java.io.NotSerializableException:groovy.util.slurpersupport.NodeChild

我已经试过铸造pomXMLTextOut变量为一个String。我尝试应用.text()方法,该方法获取jenkins沙箱安全性错误。其他人是否能够成功地从运行在Jenkins管道中的groovy脚本编写XML文件?

顺便说一句,我也试过使用一个File对象,但这不是jenkins节点之间的远程控制。只要作业始终在主控上运行,它就会工作。

回答

0

你可以尝试@NonCPS注释,并在funcation关闭那些非序列化对象这样

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

下面是Pipeline groovy plugin

的解释

@NonCPS方法可以安全地使用非序列物体为本地 变量