Groovy-код работает, а в Jenkins - нет. Как я могу сделать эту работу? - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь увеличить шаговую функцию конвейера загрузки и получаю сообщение об ошибке. Я нашел код, который он выполняет, основываясь на трассировке стека, но я не могу понять, почему он просто не назвал код как написанный.

Я написал очень много Java-кода, поэтому я знаю, что он пытается сделать. Я просто не понимаю, почему он пытается это сделать или как убедить это прекратить! Отличный образец работает отлично! Кстати: если есть идиоматический способ сделать это в Groovy / Jenkins, я все в.

версия Jenkins: 2.176.1 Groovy плагин: 2,2

test.groovy

def someFunction(def params){
    println("someFunction ${params}")
}
def someFunction2(def params){
    println("someFunction2 ${params}")
}
def mainFunc(def stuff){

}
def somemainThingrunFunmain(){

}
def ___cps___21685(){

}
def ___cps___21688(){

}
this

main.groovy

def loaded = evaluate('test.groovy' as File)

def toAugment = loaded.class.declaredMethods*.name.findAll { !(it =~ '^(main|run)$|^[$]|^(___cps___)') }
def proxy = new Script(this.binding) {
    @Override
    Object run() {
        monad.run()
    }
}
toAugment.each {
    proxy.metaClass."${it}" = { "logging ${it}".tap { println(it)} } >> loaded.&"${it}"
}

proxy.someFunction('hello world1')
proxy.someFunction2('hello world2')

выходы:

called
someFunction hello world1
called
someFunction2 hello world2

Сейчас в Дженкинсе:

Jenkinsfile:

library 'common-libraries@chb0'

node('java') {

    stage('SCM') {
        checkout scm
    }

    def loaded = load('test.groovy')
    stage('experiment') {
         loaded.someFunction('hello world1')
         loaded.someFunction2('hello world2')
    }
}

адаптированная библиотека (в common-library: vars / load.groovy):

def call(String path) {

    def loaded = steps.load(path)
    def proxy = new Script(this.getBinding()) { // error here
        @Override
        Object run() {
            loaded.run()
        }
    }
    // remove groovy and jenkins generated functions. Don't touch those
    def toAugment = loaded.class.declaredMethods*.name.findAll { !(it =~ '^(main|run)$|^[$]|^(___cps___)') }
    toAugment.each {
        proxy.metaClass."${it}" = { "logging ${it}".tap { println(it) } } >> loaded.&"${it}"
    }
}

исключение:

groovy.lang.GroovyRuntimeException: Could not find matching constructor for: load$1(load, Script1, groovy.lang.Binding)
at groovy.lang.MetaClassImpl.invokeConstructor(MetaClassImpl.java:1732)
at groovy.lang.MetaClassImpl.invokeConstructor(MetaClassImpl.java:1532)
at org.codehaus.groovy.runtime.callsite.MetaClassConstructorSite.callConstructor(MetaClassConstructorSite.java:49)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:60)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:235)
at com.cloudbees.groovy.cps.sandbox.DefaultInvoker.constructorCall(DefaultInvoker.java:25)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...