我有声明性管道,使用jenkins共享库。我正在尝试在jenkins共享库中进行递归函数调用。
我的共享库结构类似于下面的内容:
vars/xyz.groovy
在xyz.groovy中,我有一个方法foo,我xyz.foo从我的管道中调用www.example.com,这个方法是有效的。
foo(){
foo() // says No such DSL method
xyz.foo() //says no signature of method: java.lang.class.foo
}
我正在尝试理解如何调用jenkins共享库中的函数。
3条答案
按热度按时间wz3gfoph1#
this.methodName
是在共享库中递归调用函数的正确方法。尽管方法不是类的一部分。但是使用this.foo()
对我来说很有效。t3psigkw2#
我尝试用同一个文件中声明的方法调用一个递归函数。groovy最后,@萨加尔提供的选项对我不起作用作为一种解决方法,我在一个新文件(B.groovy)中创建了递归函数,并从原始文件(a.groovy)中调用它。它工作得很好:)
示例中。
b.groovy
a.groovy
o4tp2gmn3#
到目前为止,我发现的可靠地实现这一点的最不糟糕的方法是创建一个顶级 Package 器方法,其中包含一个递归闭包:
优点是可以从闭包中引用方法参数或方法作用域的状态变量,而不必在递归堆栈中传递它们,因此递归调用看起来会更干净一些;缺点是需要一些额外的样板文件来进行 Package ,而且闭包参数的命名必须与方法参数不同,否则Groovy会引发错误。