Jenkins pipeline java.io.NotSerializableException:groovy.util.slurpersupport.NodeChildren
我试图从Jenkinsfile(使用Groovy代码)运行管道作业,但出现以下错误-Jenkins pipeline java.io.NotSerializableException:groovy.util.slurpersupport.NodeChildren,jenkins,groovy,jenkins-pipeline,Jenkins,Groovy,Jenkins Pipeline,我试图从Jenkinsfile(使用Groovy代码)运行管道作业,但出现以下错误- java.io.NotSerializableException: groovy.util.slurpersupport.NodeChildren at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:860) at org.jboss.marshalling.river.RiverMa
java.io.NotSerializableException: groovy.util.slurpersupport.NodeChildren
at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:860)
at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:778)
at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:967)
at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
at org.jboss.marshalling.river.BlockMarshaller.doWriteObject(BlockMarshaller.java:65)
at org.jboss.marshalling.river.BlockMarshaller.writeObject(BlockMarshaller.java:56)
at org.jboss.marshalling.MarshallerObjectOutputStream.writeObjectOverride(MarshallerObjectOutputStream.java:50)
at org.jboss.marshalling.river.RiverObjectOutputStream.writeObjectOverride(RiverObjectOutputStream.java:179)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:344)
at java.util.HashMap.internalWriteEntries(HashMap.java:1777)
at java.util.HashMap.writeObject(HashMap.java:1354)
at sun.reflect.GeneratedMethodAccessor101.invoke(Unknown Source)
...
我试图执行的代码是-
def getDataVersionFromNexus() {
def user = params.nexusUser
def password = params.nexusPassword
...
def oldVersion = -1
print output
if (!output.isEmpty()) {
def xmlContent = new XmlSlurper().parseText(output)
oldVersion = "${xmlContent.versioning.release}"
}
return oldVersion
}
我曾尝试将该方法注释为
@NonCPS
(正如一篇类似的SO帖子中所建议的那样),但没有得到正确的输出。尝试将该值作为列表复制到ArrayList,然后使用。
例如,像这样:
tmp = xmlContent.versioning.release.toList()
list = new ArrayList()
for (i = 0; i != tmp.size(); i += 1) {
list.add(tmp.get(i))
}
oldVersion = list.get(0)
上面的问题不清楚是哪一行代码导致了这个问题。从错误来看,似乎是使用了XmlSlurper。堆栈跟踪显示在sun.reflect.GeneratedMethodAccessor101.invoke(未知源)