Jenkins 詹金斯管道:没有这样的DSL方法

Jenkins 詹金斯管道:没有这样的DSL方法,jenkins,groovy,jenkins-pipeline,nosuchmethod,Jenkins,Groovy,Jenkins Pipeline,Nosuchmethod,我有一个Jenkins管道作业,其中我声明了一些阶段,这些阶段使用我自己在同一个groovy脚本中创建的外部函数 errorList = ["badGatewayMsg", "closedByRemoteHostMsg", "connectionTimedOut"] def boolean someFunction(name) { String jobLog = jenkins.model.Jenkins.instance.getItemByFullName(name).lastBuil

我有一个Jenkins管道作业,其中我声明了一些阶段,这些阶段使用我自己在同一个groovy脚本中创建的外部函数

errorList = ["badGatewayMsg", "closedByRemoteHostMsg", "connectionTimedOut"]
def boolean someFunction(name) {
    String jobLog = jenkins.model.Jenkins.instance.getItemByFullName(name).lastBuild.log
    for (error in errorList) {
        if (jobLog.contains(error))
            return true
    }
    return false
}

stage('stage1') {
        if(someFunction('job1Name'))
           // do Something
    }

stage('stage2') {
        if(someFunction('job2Name'))
           // do Something
    }
当我想要启动此管道构建时,我得到以下错误:

java.lang.NoSuchMethodError: No such DSL method 'someFunction' found among steps ....

谢谢你的帮助

出于好奇,我将代码复制到我当地的Jenkins中,并且成功了(在修复了一些明显的问题之后,比如创建丢失的工作和修复了if条件)

然而,要使代码干净,您需要:

  • 去掉
    def
    关键字(或者去掉数据类型定义
    boolean
    )。您可能需要检查:

  • 访问不可序列化的Jenkins内部构件时,添加
    @NonCPS
    关键字

  • 为了完整性:除了访问Jenkins内部构件之外,您还需要切换沙盒模式或将代码放入全局共享库

  • 以下是我的工作示例:

    errorList = ["badGatewayMsg", "closedByRemoteHostMsg", "connectionTimedOut"]
    @NonCPS
    boolean someFunction(name) {
        String jobLog = jenkins.model.Jenkins.instance.getItemByFullName(name).lastBuild.log
        for (error in errorList) {
            if (jobLog.contains(error))
                return true
        }
        return false
    }
    
    stage('stage1') {
        if(someFunction('job1Name')) {
           // do Something
        }
    }
    
    stage('stage2') {
        if(someFunction('job2Name')) {
           // do Something
        }
    }
    

    代码是否经过编辑,或者它确实报告了代码中从未使用或声明过的方法?另外,异常的完整stacktrace也会有所帮助。该方法实际上在我的所有阶段都使用过,我只是不知道在哪里可以声明它在我的所有groovy中都是可见的script@marherbi我认为你不理解他的问题。您正在调用未在所示代码中声明或定义的方法。他询问您是否未显示代码或代码不存在,在这种情况下,这就是问题所在。您似乎使用的方法是
    someFunction
    ,但异常抱怨
    isError
    ,它似乎不是基于因果搜索的内部标识符。啊!!!你说得对,我刚刚更改了方法名,对不起!!