首页 > 解决方案 > 如何在没有调用方法的情况下访问 vars/*.groovy Jenkins 库中的全局变量/函数?

问题描述

共享库中的菜鸟,我对Jenkins 文档部分“动态加载库”感到困惑。

遵循Stackoverflow_answer,但我有一些不同的需求,只是想用一个参数从库调用一个函数到管道。

注意: Jenkins 库配置是正确的,并且已经使用另一个示例call方法检查了库访问权限

vars/foo.groovy 包含函数

//{Root}/vars/foo.groovy
def Foo_Func(Body){
    Body= Body + "This is a Message from Shared Lib."
    return Body
}

Body变量已经定义到主管道中'bar.jenkinsfile' 我真正的问题是如何在foo.groovy不使用调用方法的情况下调用函数,我尝试了以下 -

//somefolder_in_scm/bar.jenkinsfile
@Library('jenkins-shared-libs') _
def Body_Main=""
deg SUBJECT="Title 1"
def NativeReceivers = "abc@xyz.com"

pipeline{
    node any
    stage{
        script {
            /*Some script*/
        }
    }
    post {
        always {
            script {
                foo.Foo_Func(Body_Main)
                // send email
                emailext attachLog: true,
                    mimeType: 'text/html',
                    subject: SUBJECT,
                    body: Body_Main,
                    to: NativeReceivers
            }
        }
    }
}

由于我使用过_,我希望不需要导入。触发管道后发生的错误,

groovy.lang.MissingMethodException: No signature of method: java.lang.Class.Foo_Func() is applicable for argument types: 

在错误中,为什么函数Foo_Func被视为一个类?可能需要以不同的方式给出论点。任何帮助表示赞赏。

标签: jenkinsshared-librariesjenkins-groovy

解决方案


我也在写一个共享库。我认为问题出在:

def Foo_Func(Body)

对我有用的是:

def Foo_Func(Map Body)

所以如果你尝试:

def Foo_Func(String Body)

它应该工作。我认为它找不到具有正确签名的功能。


推荐阅读