Jenkins“java.lang.NoSuchMethodError:没有这样的 DSL 方法”对于 groovy lib 中定义的函数

问题描述 投票:0回答:1

管道:


// ./vars/tools.groovy
@Library('my-lib') _

pipeline {
  ...
  post {
    failure {
      script {
        tools.findErrors(currentBuild.rawBuild)
      }
    }
  }
}

tools.groovy

def action1(rawBuild)
{
  println("-- action1 --")
  def res = []
  ...
  res.each{ println(it) }
  return res
}

def action2(List res, String line)
{
  println("-- action2 --")
  ...
}

def findErrors(rawBuild)
{
  def errors = action1(rawBuild)
  def res = []
  errors.each{ action2(res, it) }
}

输出:

-- action1 --
error: ...
error: ...

Error when executing failure post condition:
Also:   org.jenkinsci.plugins.workflow.actions.ErrorAction$ErrorId: some_guid
java.lang.NoSuchMethodError: No such DSL method 'action2' found among steps [archive, bat, build ....]
    at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:219)
    at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:124)
    at groovy.lang.MetaClassImpl.invokeMethodOnGroovyObject(MetaClassImpl.java:1295)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1184)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1034)
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:41)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
    at com.cloudbees.groovy.cps.sandbox.DefaultInvoker.methodCall(DefaultInvoker.java:20)
    at org.jenkinsci.plugins.workflow.cps.LoggingInvoker.methodCall(LoggingInvoker.java:105)
    at tools.findErrors(tools.groovy:1111)

如何解决这个问题?

jenkins-pipeline jenkins-groovy
1个回答
0
投票

按照这个答案中的建议,我将

action2
更改为:

def action2(res, line)
{
  println("-- action2 --")
  ...
}

异常消失了。

© www.soinside.com 2019 - 2024. All rights reserved.