声明性管道Jenkins groovy.lang.MissingMethodException

声明性管道Jenkins groovy.lang.MissingMethodException,jenkins,groovy,jenkins-pipeline,jenkins-declarative-pipeline,Jenkins,Groovy,Jenkins Pipeline,Jenkins Declarative Pipeline,当它与脚本语法配合使用时,效果很好,但与声明性语法配合使用时,我看到下面的异常。签出步骤是否需要以不同方式包装 由GitHub以耐久性级别推送启动: 最大生存能力[管道]管道开始[管道]结束 管道hudson.remoting.ProxyException: groovy.lang.MissingMethodException:没有方法的签名: org.jenkinsci.plugins.pipeline.modeldefinition.agent.impl.Any.initialize() 适

当它与脚本语法配合使用时,效果很好,但与声明性语法配合使用时,我看到下面的异常。
签出
步骤是否需要以不同方式包装

由GitHub以耐久性级别推送启动: 最大生存能力[管道]管道开始[管道]结束 管道hudson.remoting.ProxyException: groovy.lang.MissingMethodException:没有方法的签名: org.jenkinsci.plugins.pipeline.modeldefinition.agent.impl.Any.initialize() 适用于参数类型:(java.util.LinkedHashMap, (java.lang.Boolean)值:[[:],false]at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:58) 在 org.codehaus.groovy.runtime.callsite.PojoMetaClassSite.call(PojoMetaClassSite.java:49) 在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133) 在 org.jenkinsci.plugins.pipeline.modeldefinition.model.Agent.getDeclarativeAgent(Agent.groovy:122) 位于的sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 位于java.lang.reflect.Method.invoke(Method.java:498) org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) 位于groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1213)位于 位于的groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022) org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:42) 在 org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) 在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) 在 com.cloudbees.groovy.cps.sandbox.DefaultInvoker.methodCall(DefaultInvoker.java:20) 在 org.jenkinsci.plugins.pipeline.modeldefinition.modeldexplorer.indecarativeAgent(modeldexplorer.groovy:591) 在 org.jenkinsci.plugins.pipeline.modeldefinition.modeldexplorer.call(modeldexplorer.groovy:78) 在WorkflowScript.run(WorkflowScript:1)处 cps.transform(本机方法)


假设
checkout
是一个全局var方法,您需要将其包含在
脚本
块中。感谢@MattSchuchard的响应。即使使用
脚本
块进行包装,也没有运气。不确定这里有什么问题,因为它没有指向特定的路线/步骤/阶段。。根据this:,它确实提到:脚本步骤获取一个脚本化管道块,并在声明性管道中执行该块。对于大多数用例,脚本步骤在声明性管道中应该是不必要的,但它可以提供一个有用的“转义图案填充”。大小和/或复杂度不小的脚本块应该移到共享库中。签出
时不需要脚本块。您可以使用任何不带脚本块的步骤,只要您不需要使用步骤的返回值,也不需要诸如循环之类的控制结构。您能展示您的脚本化管道吗,作为比较?正如我们所知,对于脚本化管道,使用
节点
替换
管道
,并且没有显式的
阶段
块,这只是一些小的更改。解决了这个问题&我知道这是由于最近的
管道-*hpi
插件升级造成的&没有被视为相应的
*。jpi
优先。通过删除不需要的代码来修复或解决问题&管道开始工作时没有
脚本
块或每个示例所需的任何更改。。令人惊讶的是,当我访问
Jenkins->managejenkins->configuresystem
部分时,Jenkins没有抱怨(没有红色的插件错误!)
pipeline {
  agent any
  stages {
    stage('Checkout SCM : Some Git repo') 
    {
        steps {
            checkout([$class: 'GitSCM', branches: [[name: 'refs/heads/proj_dev_branch']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'CleanBeforeCheckout'], [$class: 'WipeWorkspace']], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'credId', refspec: '+refs/heads/proj_dev_branch:refs/remotes/origin/proj_dev_branch', url: 'git@REPO_URL.git']]])
        }
    }


    stage ('Some stage')
    {
        steps {
            sh "echo Something"
            sh 'cat $WORKSPACE/somedir/somefile.txt'
        }
    } 
    }

}