Jenkins示例groovy代码与普通groovy代码(闭包错误)

sz81bmfz  于 2022-11-01  发布在  Jenkins
关注(0)|答案(1)|浏览(210)

在一个jenkins共享库中我可以做这样的事情:

Jenkins档案

@Library(value="my-shared-lib", changelog=false) _
jobGenerator {
        notifier = [notifyEveryUnstableBuild: true]
}

共享库/变量/作业生成器.groovy

def call(body) {
    println 'hi!'
}

为了更好地理解发生了什么,我在本地创建了两个groovy文件(完全没有引用jenkins):

示例/启动程序.groovy

jobGenerator {
 s = 's'
}

示例/作业生成器.groovy

def call(body) {
 println 'inside jobGenerator '
}

但当我用以下代码运行时:

groovy "/home/user/samples/launcher.groovy"

我得到:

Caught: groovy.lang.MissingMethodException: No signature of method: launcher.jobGenerator() is applicable for argument types: (launcher$_run_closure1) values: [launcher$_run_closure1@61019f59]
groovy.lang.MissingMethodException: No signature of method: launcher.jobGenerator() is applicable for argument types: (launcher$_run_closure1) values: [launcher$_run_closure1@61019f59]
    at launcher.run(launcher.groovy:2)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

那么,上面的代码中有多少是jenkins/共享库特有的呢?是否有可能用 plain groovy编写类似上面的代码呢?
或者换句话说,我如何将上面的jenkins代码转换成普通的groovy?

nvbavucw

nvbavucw1#

恕我直言,以下是接近Jenkins正在做的事情

启动程序.groovy

// load library scripts/functions
def binding = this.getBinding()
def gshell = new GroovyShell(this.getClass().getClassLoader(),binding)
new File("./my-lib").traverse(nameFilter: ~/.*\.groovy$/){f-> binding[f.name[0..-8]] = gshell.parse(f) }

// main
bar{
    foo(name:"world")
}

./我的程式库/foo.groovy

def call (Map m){
    return "hello $m.name"
}

./我的程式库/棒.groovy

第一个

相关问题