2015-07-27 2 views
10

जब मैं जेनकींस वर्कफ़्लो (जेनकींस 1.60 9 .1, वर्कफ़्लो 1.8) पर निम्न कोड चलाता हूं तो मुझे 'NotSerializableException' (नीचे भी) की त्रुटि मिलती है। हालांकि, अगर मैं "के लिए" कार्य के बाहर "निर्माण कार्य" को स्थानांतरित करता हूं तो यह ठीक काम करता है (नौकरी सक्रिय है)। कोई विचार क्यों यह व्यवहार?जेनकिंस वर्कफ़्लो बिल्ड के दौरान NotSerializableException त्रुटि को कैसे ठीक करें?

node('master') { 
ws('/opt/test) { 
def file = "/ot.property" 
def line = readFile (file) 
def resultList = line.tokenize() 
for(item in resultList) 
    { 
build job: 'testjob_1' 
    } 
} 
} 

गॉट त्रुटि:

Running: End of Workflow 
java.io.NotSerializableException: java.util.ArrayList$Itr 
    at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:860) 
    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.doWriteObject(RiverMarshaller.java:854) 
    at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032) 


..... 

उत्तर

12

मैं thnk यह है, क्योंकि यह रूप में जल्द ही resultList पर unserializable item इटरेटर क्रमानुसार करने के रूप में यह build job कदम हिट कोशिश कर रहा है। nonserializable चर का उपयोग पर मार्गदर्शन के लिए यहाँ देखें:

https://github.com/jenkinsci/workflow-plugin/blob/master/TUTORIAL.md#serialization-of-local-variables

एक समाधान के सुरक्षित रूप से कार्यप्रवाह प्लगइन का उपयोग कर पुनरावृति के रूप में, आप हमारे लिए सी-शैली छोरों की जरूरत है। ऐसा करें:

for (int i = 0; i < resultList.size; i++) { 
    etc... 
+0

इसके अलावा यहां संदर्भ:

+0

tnx, अब बेहतर लगता है! – oTolev

+0

एफवाईआई, यह विशेष त्रुटि [जेनकिन्स -27421] (https://issues.jenkins-ci.org/browse/JENKINS-27421) के रूप में ट्रैक की जाती है। –

1

CloudBees Platform Help page के अनुसार:

By design the pipeline can only keep records of Serializable objects. If you still need to keep an intermediate variable with a non serializable object, you need to hide it into a method and annotate this method with @NonCPS .

तो तुम @NonCPS सहायक विधि के साथ एक समारोह में अपने कोड को बदलने चाहिए।

संबंधित जेनकींस बग: JENKINS-27421

+1

हाँ। उस प्रभाव के लिए यह सुंदर उदाहरण मिला: https://gist.github.com/oifland/ab56226d5f0375103141b5fbd7807398 – Prachi

संबंधित मुद्दे