2017-04-24 303 views
1

我試圖運行從Jenkinsfile流水線作業(使用Groovy代碼),但我得到了下面的錯誤 -詹金斯管道java.io.NotSerializableException:groovy.util.slurpersupport.NodeChildren

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(如在一個相似的,所以建議後),但我沒有得到正確的輸出。

+0

哪行代碼引起問題,從上面的問題中不清楚。 – Rao

+0

從錯誤看起來像是使用XmlSlurper。堆棧跟蹤顯示在'sun.reflect.GeneratedMethodAccessor101.invoke(未知源)' – saikosen

回答

1

嘗試將此值作爲列表複製到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)