声明性管道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'
}
}
}
}