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

时间:2017-08-16 19:10:49

标签: java jenkins groovy jenkins-pipeline

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

  

jenkins中的管道脚本

 require_once __DIR__ . "/mongodb/";

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

  

/tmp/Provsioning/e.groovy

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

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

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
         }
        }

完成:失败

1 个答案:

答案 0 :(得分:0)

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

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

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

可能会抛出NotSerializableException,因为A类非Serializable

解决这个问题,将所有与非可序列化变量一起使用的代码放入@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:我没有检查代码,只是为了给你一个例子..