web-dev-qa-db-ja.com

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

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

10
e.t.

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

これを解決する1つの方法は次のとおりです。

// 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()
    }
}
12
sshepel

コードに宣言クラスフィールドがありませんscript

class MyClass implements Serializable {

    def script

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

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

このコードは大丈夫です@bram

3
lethe3000