2017-07-20 8 views
1

"スクリプト"指令でload関数を使用して、スクリプトをGroovyスクリプトにインポートしようとしています。以下は、私が持ってる簡素化コードを達成することであるこのカスタムGroovyスクリプトまたはJenkinsfileで「シリアライズ不可能」とは何ですか?

プロジェクト構造

Jenkinsfile 
script.groovy 
helper/ 
     Builder.groovy 

Jenkinsfile

.... 
stage ('Build') { 
    steps { 
     script { 
      def executer = load "script.groovy" 
      executer.printText() 
     } 
    } 
} 
.... 

script.groovy

import helper.Builder 

builder = new Builder() 

def printText(){ 
    def text = builder.getText() 
    println text 
} 

Builder.groovy

package helper 

class Builder{ 
    def getText(){ 
     return "blah" 
    } 
} 

しかし、Jenkinfileを実行すると失敗し続け、 "import helps.builder"というコードが原因で問題が発生しています。しかし、私はBuilder.getText()関数を呼び出すことができるように、 "script.groovy"にBuilderクラスをインポートすることができます。

私が理解していないことの1つは、terminalを使用してscript.groovyを実行しようとするとうまく動作し、問題がないことです。

アイデアはありますか?ところで

は、下記本当にコマンドラインのようなものが動作しませんジェンキンス

an exception which occurred: 
    in field collector 
    in field abnormal 
    in field outcome 
    in field body 
    in field step 
    in field thread 
    .... 
    .... 
Caused: java.io.NotSerializableException: org.codehaus.groovy.control.ErrorCollector 
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) 
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) 
.... 
.... 

答えて

0

ジェンキンスパイプライングルーヴィーサンドボックスからのエラーメッセージです。これをデバッグすることは可能ですが、あなたの走行距離は、実行しているジェンキンコアとパイプラインプラグインのバージョンによって異なります。あなたがそれを働かせても、将来のバージョンでは壊れそうです。代わりにjenkins shared librariesを使用する必要があります。これは、共有コードをパイプラインに挿入するためのサポートされている方法です。

関連する問題