【问题标题】:How to access Global variable/ functions in vars/*.groovy Jenkins Library without call method?如何在没有调用方法的情况下访问 vars/*.groovy Jenkins 库中的全局变量/函数?
【发布时间】:2021-03-02 10:05:58
【问题描述】:

共享库中的新手, 我对Jenkins document“动态加载库”部分感到困惑。

关注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' 我真正的问题是如何在不使用 call 方法的情况下从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被视为一个类?可能需要以不同的方式给出论点。 任何帮助表示赞赏。

【问题讨论】:

    标签: jenkins shared-libraries jenkins-groovy


    【解决方案1】:

    您是否尝试过声明一个字段?

    @groovy.transform.Field def myVar = "某事"


    script.myScript.myVar

    假设您的文件是 myScript.groovy。

    【讨论】:

      【解决方案2】:

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

      def Foo_Func(Body)
      

      对我有用的是:

      def Foo_Func(Map Body)
      

      所以如果你尝试:

      def Foo_Func(String Body)
      

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

      【讨论】:

        猜你喜欢
        • 2012-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-19
        • 1970-01-01
        • 2022-01-15
        • 1970-01-01
        相关资源
        最近更新 更多