2017-11-29 4 views
1

Jenkinsパイプラインでは、私はSimpleTemplateEngineを使用してテンプレートを更新している最初の行 "writeFile"で例外を受けています。これが成功し、この後はバットコマンドを実行してファイルを移動します。例外の後、私はJenkinsからイニシャライドされているコードの一部を投稿しました。Jenkinsがシリアライズ例外をスローする

[Pipeline] writeFile 
[Pipeline] } 
[Pipeline] // stage 
[Pipeline] } 
[Pipeline] // node 
[Pipeline] End of Pipeline 
an exception which occurred: 
in field delegate 
in field delegate 
in field delegate 
in field delegate 
in field delegate 
in field delegate 
in field locals 
in field caller 
in field e 
in field program 
in field threads 
in object [email protected] 
Caused: java.io.NotSerializableException: groovy.lang.Binding 
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.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.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.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.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.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.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:1785) 
at java.util.HashMap.writeObject(HashMap.java:1362) 
at sun.reflect.GeneratedMethodAccessor122.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.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.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) 
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.TreeMap.writeObject(TreeMap.java:2438) 
at sun.reflect.GeneratedMethodAccessor151.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) 
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.call(CpsVmExecutorService.java:64) 
at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:112) 
at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at java.lang.Thread.run(Thread.java:745) 
Finished: FAILURE 

ソースコードの一部 -

........ 
     if (fileExists("${templatePath}")) { 
      createInstallCmdFile(templatePath, finalTemplate, exeName) 

      bat """ 
      copy /Y "${finalTemplate}" "${shareDir}\\" || exit /b 1 
      """ 
     } 
    } 

    def createInstallCmdFile(def template, def target, def exeName) { 
    def installerTemplate=readFile "${template}" 
    def binding=[ 
      'exeName': exeName 
    ] 
    def engine=new groovy.text.SimpleTemplateEngine() 
    def tpl=engine.createTemplate(installerTemplate).make(binding) 
    writeFile file: "${target}", text: "${tpl}".toString() 
    } 

    return this 

答えて

2

あなたの全体のパイプラインを見せず、起こっている場所を正確に言うことは困難です。ジェンキンスはパイプラインを一時停止することができ、ローカル変数などを含むすべての州はSerializableである必要があります。 Jenkinsパイプラインの基盤となるCPSエンジンは、エージェント/マスター切断の場合にパイプラインを取り出すなど、多くの理由でこれを必要とします。一部のパイプラインコードは、@NonCPSにラップして、CPSエンジンによって変換されないようにすることができます。

正確にどこを検出するかの1つの方法は、ステップを別の場所に追加して、徐々に先に移動して、正しい場所。

あなたの例の中で最も明白な物体がgroovy.text.SimpleTemplateEngine() is not Serializable以来、def engine=new groovy.text.SimpleTemplateEngine()です。

+0

おかげで、私はスクリプトを更新しました – user3462473

+0

@ user3462473質問のスクリプトを更新しましたか?これがあなたの質問に答えるなら、答えとしてマークしてください。 – mkobit

0

@mkobitが言うように、groovy.text.SimpleTemplateEngine直列化ではありません。私にとって、単にgroovy.text.StreamingTemplateEngineへの切り替えがシリアル化の問題aを回避します必要な機能を提供します。 -

FWIW私はGroovyのドキュメントでは、このオプションを発見:http://docs.groovy-lang.org/docs/next/html/documentation/template-engines.html#_template_framework をし、その後StreamingTemplateEngineで実験します。これらのドキュメントに掲載されている他のエンジンの一部も動作するかもしれませんが、私のニーズに合ったものを見つけてから試してみませんでした。他の人のいずれかが働いているかどうかを決定的に判断した場合は、コメントを追加してください。

参考として、ここで私が検証するために使用されるパイプラインのスクリプトがあります:

node { 
    stage('template') { 
     def raw  = 'b:"${b}"' 
     def dict  = [:] 
     def engine = new groovy.text.StreamingTemplateEngine() 
     def template = engine.createTemplate(raw).make(dict) 

     dict.b = 'BBB' 
     echo template.toString() 

     dict.b = 'bbb' 
     echo template.toString() 
    } 
} 

そして、ここでは(隠されたいくつかの「個人」の値で)生成される出力です:ヒントの

Started by user USER-NAME 
[Pipeline] node 
Running on JENKINS-AGENT in /opt/jenkins-slave/workspace/JOB-PATH/[email protected] 
[Pipeline] { 
[Pipeline] stage 
[Pipeline] { (template) 
[Pipeline] echo 
b:"BBB" 
[Pipeline] echo 
b:"bbb" 
[Pipeline] } 
[Pipeline] // stage 
[Pipeline] } 
[Pipeline] // node 
[Pipeline] End of Pipeline 
Finished: SUCCESS 
関連する問題