Jenkins中的WorkflowScript.with

Jenkins中的WorkflowScript.with,jenkins,groovy,jenkins-pipeline,Jenkins,Groovy,Jenkins Pipeline,我在jenkins共享库中有一个类,它存储jenkins管道脚本中WorkflowScript类的实例,如下所示 def myTools=new my.org.myTools(此) MyTools的构造函数只存储WorkflowScript的实例,如下所示 MyTools(script){ this.script = script } 然后我有了一个方法,它尝试使用groovy的 myMethod(){ script.with{ node{

我在jenkins共享库中有一个类,它存储jenkins管道脚本中WorkflowScript类的实例,如下所示

def myTools=new my.org.myTools(此)

MyTools的构造函数只存储WorkflowScript的实例,如下所示

MyTools(script){
    this.script = script
}
然后我有了一个方法,它尝试使用groovy的

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)

我希望
脚本的内部。使用
闭包可以访问与
脚本相同的所有内容。
,但它看起来只能访问
java.lang.Object
的方法。是否可以使
脚本。with
closure在
脚本的相同上下文中运行。

对于groovy closure,可以指定

有以下选项:委托人优先、仅委托人优先、所有者优先(默认)、仅所有者、至自身


我认为管道脚本有一个特殊的策略,在您的类中有一个默认策略。

您是否检查了Jenkins中的安全部分,查看它是否阻止了对“安全”功能的访问?我记得在一开始运行脚本时也会遇到类似的错误。您可能需要浏览并单击仪表板上的“接受”。您的回答肯定会指引我正确的方向。我最终创建了一个包含管道脚本的闭包,然后将该闭包的委托设置为我正在使用的jenkins管道工作流脚本的实例
pipelineClosure.setDelegate(jenkinsWorkflowScript)
@MicahPotter您介意为问题添加解决方案还是添加新答案?那真的很有用!