2017-06-16 120 views
0

当运行我的Java Groovy脚本,并更新到最新的Groovy的管道。感谢您的帮助。[email protected]引起:java.io.NotSerializableException:

我得到这个错误发生了一个异常:字段中的字段调用者字段e中的字段中的字段中的字段线程中的线程[email protected]导致:java.io.NotSerializableException :hudson.model.Run $工件 我认为有问题的代码是

stage('Retrieve Code') { 
     FileCacheCountCheck(); 
     def job = jenkins.model.Jenkins.instance.getItem("pipeline.preview.build") 
     def build = job.getBuildByNumber(buildNumber) 
     def art = build.artifacts[0] 
     def file = art.file 
     def targetPath = pwd() 
     "rm -rf ${targetPath}/output".execute().text 
     "rm -rf ${targetPath}/script".execute().text 
     touch file: "${targetPath}/output/package.tmp" 
     "cp ${file} ${targetPath}/output/package.zip".execute().text 
     "cp -R ${targetPath}@script/ ${targetPath}/script/".execute().text 
        } 
stage('Stash Package') { 

DEF TARGETPATH = PWD() 藏匿包括: '输出/ **',名称: '包'

基于关闭这篇文章中,https://github.com/jenkinsci/pipeline-plugin/blob/master/TUTORIAL.md#serializing-local-variables我试图用

@NonCPS 
stage('Retrieve Code') { 
    FileCacheCountCheck(); 
    @NonCPS 
    def job = jenkins.model.Jenkins.instance.getItem("pipeline.preview.build") 
    @NonCPS 
    def build = job.getBuildByNumber(buildNumber) 
    @NonCPS 
    def art = build.artifacts[0] 
    @NonCPS 
    def file = art.file 
    @NonCPS 
    def targetPath = pwd() 
    "rm -rf ${targetPath}/output".execute().text 
    "rm -rf ${targetPath}/script".execute().text 
    touch file: "${targetPath}/output/package.tmp" 
    "cp ${file} ${targetPath}/output/package.zip".execute().text 
    "cp -R ${targetPath}@script/ ${targetPath}/script/".execute().text 
       } 
stage('Stash Package') { 
    @NonCPS 
    def targetPath = pwd() 
    stash includes: 'output/**', name: 'package' 
         } 

这里是整个堆栈跟踪 发生异常:在外地当地人场呼叫者场E实地计划在外地线程对象 [email protected]引起:java.io.NotSerializableException:hudson.model.Run $ artifact at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:860)at org.jboss.marshalling.river.BlockMarshaller.doWriteObject(BlockMarshaller.java: 65)在org.jboss.marshalling.river.BlockMarshaller.writeObject(BlockMarshaller.java:56)在org.jboss.marshalling.MarshallerObjectOutputStream.writeObjectOverride(MarshallerObjectOutputStream.java:50)在org.jboss.marshalling.river.RiverObjectOutputStream.writeObjectOverride (RiverObjectOutputStream.java:179)在java.io.Obje在sun.reflect.GeneratedMethodAccessor74.invoke(未知源)处,在sun.reflect.DelegatingMethodAccessorImpl处的java.util.HashMap.writeObject(未知源)处的java.util.HashMap.internalWriteEntries(未知源)处的ctOutputStream.writeObject(未知源)。 invoke(Unknown Source)at org.jboss.marshalling.reflect.SerializableClass.callWriteObject(SerializableClass.java:271)at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(java.lang.reflect.Method.invoke(Unknown Source) (RiverMarshaller.java:976)at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)at org.jboss。 marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)在org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)在org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java: 1032)在org.jboss.marshalling。 river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)在org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:967)在org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)在org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)在org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)在org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject (RiverMarshaller.java:967)at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)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.BlockMarshaller.doWriteObject(BlockMarshaller.java: 65)在org。 jboss.marshalling.river.BlockMarshaller.writeObject(BlockMarshaller.java:56)在org.jboss.marshalling.MarshallerObjectOutputStream.writeObjectOverride(MarshallerObjectOutputStream.java:50)在org.jboss.marshalling.river.RiverObjectOutputStream.writeObjectOverride(RiverObjectOutputStream.java: 179)在java.io.ObjectOutputStream.writeObject(未知来源)在java.util.TreeMap.writeObject(未知来源)在sun.reflect.GeneratedMethodAccessor272.invoke(未知来源)在sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)在java.lang.reflect.Method.invoke(来源不明)在org.jboss.marshalling.reflect.SerializableClass.callWriteObject(SerializableClass.java:271)在org.jboss.marshalling。river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:976)at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032) org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)at org.jboss.marshalling.AbstractObjectOutput.writeObject(AbstractObjectOutput .java:58)at org.jboss.marshalling.AbstractMarshaller.writeObject(AbstractMarshaller.java:111)at org.jenkinsci.plugins.workflow.support.pickles.serialization.RiverWriter.writeObject(RiverWriter.java:140)at org。 jenkinsci.plugins.workflow.cps.CpsThreadGroup.saveProgram(CpsThreadGroup.java:458)在org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.saveProgram(CpsThreadGroup.java:434)at org.jenkinsci.plugins.workflow.cps。 CpsThreadGroup.saveProgramIfPossible(CpsThreadGroup.java:422)at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:362)at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access $ 100(CpsThreadGroup.java:82)at org.jenkinsci.plugins.workflow .cps.CpsThreadGroup $ 2.call(CpsThreadGroup.java:242)at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup $ 2.call(CpsThreadGroup.java:230)at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService $ 2。调用(CpsVmExecutorService.java:64)在hudson.remoting.SingleLaneExecutorService $ 1.run(SingleLaneExecutorService.java:112)上的java.util.concurrent.FutureTask.run(未知源代码)在jenkins.util.ContextResettingExecutorService $ 1.run(ContextResettingExecutorService。 java:28)at java.util.concurrent.Executors $ RunnableAdapter.call(Unknown Source)at java.util.concurrent.FutureTask.run(Unknown Source)at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)at java .util.concurrent.ThreadPoolExecutor $ Worker.run(Unknown Source)在java.lang.Thread.run(Unknown Source)完成:FAILURE

回答

0

按照article:最安全的做法是隔离标有注释@NonCPS的方法中使用非序列化状态的

只是声明了一个函数,并把非序列化的呼叫/步入它

@NonCPS --- Once I removed this it worked. Also had to pass buildnumber as a parameter 
def getArtifactPath(){ 
    def job = jenkins.model.Jenkins.instance.getItem("pipeline.preview.build") 
    def build = job.getBuildByNumber(buildNumber) 
    def art = build.artifacts[0] 
    return art.file 
} 

并将此功能称为您的舞台步骤之一。

相关问题