为 Jenkins Workflow/Pipeline 创建可序列化 Groovy Class 的语法是什么

What's the syntax to create a Serializable Groovy Class for Jenkins Workflow/Pipeline

使用 Jenkins Workflow Groovy,我 运行 在尝试为一个非常简单的 class 创建对象时遇到序列化错误。通过可序列化测试需要什么样的语法糖?以下代码失败。添加 @Serializable 行失败 "class java.io.Serializable is not an annotation in @java.io.Serializable"

//@Serializable 
class TestClass { 
    def hello() { 
        println "halloooo" 
    } 
} 
def myobj = TestClass.newInstance() 
node () { 
    myobj.hello() 
}

感谢 izzekil 回答了这个问题。

class TestClass implements Serializable {}

值得一提的是 Groovy classes 不需要显式实现 Serializable 接口 - 任何 Groovy class 都实现以下两个接口: SerializableGroovyObject.

但是,was an issue 就像 Groovy CPS 和 Jenkins Workflow CPS 库中问题中提到的那样。它在 groovy-cps:1.20workflow-cps:2.41.

中得到修复

另一方面,不推荐使用 Class.newInstance() 在 Jenkins 管道中初始化对象。此方法默认列入黑名单,当您尝试批准它时,Jenkins 警告您批准此签名可能会引入安全漏洞。

如果您查看 Class.newInstance() 方法实现,您会发现它疯狂地使用了反射。在这种情况下,最好使用 new TestClass() 而不是 TestClass.newInstance() 来实例化对象。