我希望能够在Jenkins Groovy脚本中添加回调作为参数。我认为关闭是我需要的,但我不知道该怎么做。这是我想要的输出:
enter
hello
exit
JenkinsFile:
def rootDir = pwd()
def tools = load "${rootDir}\\patchBuildTools.groovy"
mainMethod(tools.testCl("hello"))
patchBuildTools.groovy
def mainMethod(Closure test) {
println "enter"
test()
println "exit"
}
def testCl(String message) {
println message
}
这给了我一个输出:
hello
enter
java.lang.NullPointerException: Cannot invoke method call() on null object
是否可以获得我想要的电话订单?
更新 - 根据答案
JenkinsFile:
def rootDir = pwd()
def tools = load "${rootDir}\\patchBuildTools.groovy"
mainMethod("enter", "exit")
{
this.testCl("hello")
}
patchBuildTools.groovy
def mainMethod(String msg1, String ms2, Closure test) {
println msg1
test()
println ms2
}
def testCl(String message) {
println message
}
答案 0 :(得分:5)
您可能误解了闭包是如何工作的 - 闭包是一个匿名函数,您可以将其传递给另一个函数并执行。
话虽如此,在您的示例中,您将testCl()
的结果String
传递给mainMethod()
。这是错误的,因为mainMethod
期望Closure
而不是String
作为传递的参数。
我不确定您要实现的目标,但以下是您如何使用Closure
:
<强> Jenkinsfile 强>
def rootDir = pwd()
def tools = load "${rootDir}\\patchBuildTools.groovy"
mainMethod() {
echo "hello world from Closure"
}
<强> patchBuildTools.groovy 强>
def mainMethod(Closure body) {
println "enter"
body() // this executes the closure, which you passed when you called `mainMethod() { ... }` in the scripted pipeline
println "exit"
}
<强>结果强>
enter
hello world from Closure
exit