我在 jenkins 共享库中有一个类,它存储来自 jenkins 管道脚本的 WorkflowScript 类的实例,如下所示。
def myTools = new my.org.MyTools(this)
MyTools 的构造函数只是存储 WorkflowScript 的实例,如下所示......
MyTools(script){
this.script = script
}
然后我有一个尝试使用 groovy 的方法.with
on script
但失败了...
myMethod(){
script.with{
node{
echo "I want to be able to use pipeline syntax here"
sh 'echo "without using script. in front of each command"'
}
}
}
但是当我运行这个时,我收到以下错误...
hudson.remoting.ProxyException: groovy.lang.MissingMethodException: No signature of method: org.jenkinsci.plugins.workflow.cps.CpsClosure2.node() is applicable for argument types: (org.jenkinsci.plugins.workflow.cps.CpsClosure2) values: [org.jenkinsci.plugins.workflow.cps.CpsClosure2@855f14e]
Possible solutions: clone(), use([Ljava.lang.Object;), notify(), wait(), call(), run()
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:58)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:54)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite
.java:113)
我本来期望里面的script.with
闭包可以访问所有相同的东西script.
,但看起来它只能访问以下方法java.lang.Object
。是否有可能获得script.with
具有相同上下文的函数闭包script.
?