10

我想将我的 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

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

4

2 回答 2

13

你走对了,但问题是你没有将脚本对象传递给你的类的实例,而是试图调用你创建的类中没有定义的方法。

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

// 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()
    }
}
于 2016-10-09T11:05:35.767 回答
3

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

class MyClass implements Serializable {

    def script

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

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

这段代码应该没问题@bram

于 2017-05-02T12:00:48.457 回答