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