2016-10-09 5 views
7

Jenkinsのパイプラインスクリプトを読みやすく再利用するためのクラスにリファクタリングする必要があります。Jenkinsパイプラインスクリプトのセクションをクラスに抽出するにはどうすればよいですか?

問題が発生したときに例外が発生します。

私はように、クラスにそれを解凍するとき、私は

echo currentBuild.toString() 

すべてがうまく

で実行します:しかし

class MyClass implements Serializable { 
    def runBuild() { 
     echo currentBuild.toString() 
    } 
} 
new MyClass().runBuild() 

私が手 のは、簡単な例を見てみましょう例外:

Started by user admin 
Replayed #196 
[Pipeline] End of Pipeline 
groovy.lang.MissingPropertyException: No such property: currentBuild for class: MyClass 

クラスにパイプラインコードを抽出する適切な方法は何ですか?

答えて

7

あなたは正しい方法ですが、スクリプトオブジェクトをクラスのインスタンスに渡さず、作成したクラスで定義されていないメソッドを呼び出そうとしていたという問題があります。

// Jenkins file or pipeline scripts editor in your job 
new MyClass(this).runBuild() 

// Class declaration 
class MyClass implements Serializable { 
    def script 
    MyClass(def script) { 
     this.script=script 
    } 
    def runBuild() { 
     script.echo script.currentBuild.toString() 
    } 
} 
+0

おかげであなたをOK @bramようになります。ここでは

は、この問題を解決する一つの方法です回答。 質問を投稿して数分後にそれを見つけました:) –

+0

ああ、np私はこの質問を解決してうれしいです;) – sshepel

+1

これは最新のパイプラインプラグインv2.5では動作しません。例外がスローされました 'groovy.lang.MissingPropertyException:そのようなプロパティはありません:クラスのクラス:MyClass' – bram

2

あなたのコード行方不明宣言クラスフィールドスクリプト

class MyClass implements Serializable { 

    def script 

    MyClass(def script) { 
     this.script=script 
    } 

    def runBuild() { 
     script.echo script.currentBuild.toString() 
    } 
} 

このコードは、あなたの種類の

関連する問題