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

e.t*_*.t. 10 groovy refactoring jenkins jenkins-pipeline jenkinsfile

我想将我的Jenkins管道脚本重构为类以便于阅读和重用.

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

当我跑

echo currentBuild.toString()
Run Code Online (Sandbox Code Playgroud)

一切都好

但是当我把它提取到一个类中时:

class MyClass implements Serializable {
    def runBuild() {
        echo currentBuild.toString()
    }
}
new MyClass().runBuild()
Run Code Online (Sandbox Code Playgroud)

我得到一个例外:

Started by user admin
Replayed #196
[Pipeline] End of Pipeline
groovy.lang.MissingPropertyException: No such property: currentBuild for class: MyClass
Run Code Online (Sandbox Code Playgroud)

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

ssh*_*pel 12

你是正确的方法,但问题是你没有将脚本对象传递给你的类的实例,并试图调用未在你创建的类中定义的方法.

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

// 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()
    }
}
Run Code Online (Sandbox Code Playgroud)