gpt4 book ai didi

管道脚本中的 java.io.NotSerializedException 错误

转载 作者:太空宇宙 更新时间:2023-11-04 11:13:42 25 4
gpt4 key购买 nike

我使用下面的代码加载 Groovy 文件并传递参数:

Pipeline Script in jenkins

@NonCPS 
def ld() {
def pck = load '/tmp/Provsioning/e.groovy';
return pck.xmlParseData("${params.hos_nam}");
}
node {
stage ('Deploying Packages'){
def aby = ld();
}
}

其中 ${params.hos_nam} 是构建参数,installpackage groovy 如下所示

/tmp/Provsioning/e.groovy

public class ReadXMLFile {
def xmlParseData(String g){
installPackage(a,b,c);
input 'proceed'
aemRestart(b);
}
def installPackage(String a, String b,String c){
//some code
}
def aemRestart(String a){
//some code
}
}

我不确定为什么会出现以下错误:

an exception which occurred:
in field val$body
in field closures
in object org.jenkinsci.plugins.workflow.cps.CpsThreadGroup@67aecf21
Caused: java.io.NotSerializableException: org.codehaus.groovy.runtime.InvokerHelper$1
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.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:1785)
at java.util.HashMap.writeObject(HashMap.java:1362)
at sun.reflect.GeneratedMethodAccessor198.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.jboss.marshalling.reflect.SerializableClass.callWriteObject(SerializableClass.java:271)
at 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)
at 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)
at 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)

Finished: FAILURE

最佳答案

您在管道的两个步骤之间的变量中保存的对象必须是 Serializable .

class A{
def f(){
return [hello:'world']
}
}

node{
def a = new A()
def b = a.f()
}

可能会抛出 NotSerializedException,因为类 A 不可序列化

为了解决这个问题,请将所有与不可序列化变量一起使用的代码放入@NonCPS注释函数中:

class A{
def f(){
return [hello:'world'] //hashmap itself is serializable
}
}

@NonCPS
def f1(){
def a = new A()
return a.f()
}

node{
def b = f1()
}

PS:我没有检查代码,只是为了给您提供一个示例..

关于管道脚本中的 java.io.NotSerializedException 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45721262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com