如何将 Jenkins 管道脚本的部分提取到 类?

How to extract sections of Jenkins pipeline script into classes?

我想将我的 Jenkins 管道脚本重构为 classes 以提高可读性和重用性。

问题是我这样做时遇到异常。 让我们看一个简单的例子:

当我运行

echo currentBuild.toString()

一切都很好

但是当我将它提取到 class 中时:

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

将管道代码提取到 classes 中的正确方法是什么?

您的方法是正确的,但问题是您没有将脚本对象传递给 class 的实例,而是试图调用 [=15] 中未定义的方法=] 你创建的。

这是解决此问题的一种方法:

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

您的代码缺少声明 class 字段 脚本

class MyClass implements Serializable {

    def script

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

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

这段代码应该没问题@bram