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

标签 jenkins groovy refactoring jenkins-pipeline jenkinsfile

我想将我的Jenkins管道脚本重构为可读取和可重用的类。

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

当我运行

echo currentBuild.toString()

一切安好

但是当我这样提取它到一个类中时:
class MyClass implements Serializable {
    def runBuild() {
        echo currentBuild.toString()
    }
}
new MyClass().runBuild()

我得到一个异常(exception):
Started by user admin
Replayed #196
[Pipeline] End of Pipeline
groovy.lang.MissingPropertyException: No such property: currentBuild for class: MyClass

将流水线代码提取到类中的正确方法是什么?

最佳答案

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

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

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

关于jenkins - 如何将Jenkins管道脚本的各个部分提取到类中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39942442/

相关文章:

sorting - Groovy - 使用两个标准对我的对象列表进行排序

android - 从自定义任务中运行gradle任务

ruby-on-rails - 添加快捷方式还是遵循 ActiveRecord 语义?

maven - 如何从父pom继承依赖到子pom

Docker Windows 10 - 如何运行 Jenkins,在 d 驱动器上绑定(bind)卷而不会出现权限错误

jenkins - 如何解析数据,并写入 JSON 文件

testing - hudson / Jenkins : Buckminster emma: How to exclude packages

java - 常规 : Attempting to parse a date

c++ - 重复的 switch 语句需要重构

javascript - aptana studio 3重构重命名操作在javascript变量上不可用