我在Jenkins共享库中有一个类,它存储来自Jenkins管道脚本的WorkflowScript类的示例,如下所示。def myTools = new my.org.MyTools(this)
MyTools的构造函数只是像这样存储WorkflowScript的示例...
MyTools(script){
this.script = script
}
那么我有一个方法尝试在script
上使用groovy的.with
,但是失败了...
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.
的相同上下文下工作?
2条答案
按热度按时间oug3syen1#
对于Groovy闭包,可以指定闭包用来解析方法和属性的策略
有几种选择:第一个委派、仅委派、所有者第一个(默认)、仅所有者、至自身
我觉得pipeline脚本有一个特殊的策略,在你的类里面有一个默认的策略。
nxowjjhe2#