Я пытаюсь разработать общие библиотеки и имею следующую структуру каталогов
- src/com/mycomapny
- MyTest.groovy
- vars
- test.groovy
- Jenkinsfile
мой Jenkinsfile вызывает только метод, доступный в test.groovy с обязательным вводом. который импортирует MyTest и создает объект и вызывает конструктор, за которым следует фактический метод, который выполняет функции, доступные в файле MyTest.groovy.
Здесь класс конструктора никогда не вызывается из глобальных vars / test.groovy
Я попытался вызвать класс и метод из Groovy, он работает нормально, но когда я вызываю его из jenkinsfile, он не работает. Я не знаю, почему я не могу вызвать конструктор и чего мне не хватает.
Я поместил @NonCPS в метод выше test.groovy, но он все еще не работает.
//MyTest.groovy
package com.mycompany
class MyTest implements Serializable {
public _notification
MyTest(Closure content) {
notification = [:]
content.resolveStrategy = Closure.DELEGATE_FIRST
content.delegate = notification
content()
println("Entered Constructor")
this._notification = notification
}
}
//test.groovy
import com.mycopany.MyTest
def notify(Closure content) {
println("This is line i am getting in the output but nothing after that")
MyTest tester = new MyTest(content)
println(tester._notification.colorcode)
}
//Jenkinsfile
@library("MysharedLibrary@master") _
pipeline{
stages {
stage {
steps {
test.notify {
buildno = 12
jobname = "Mytest"
colorcode = "Blue"
}
}
}
}
}
здесь я просто хочу вызвать конструктор из файла jenkins и распечатать значение входного значения в моем vars / test.groovy.
EDIT1: когда я использую @NonCPS выше метода def nofity, моя сборка становится успешной, но я не получаю ничего, кроме оператора печати в первой строке метода уведомления.
Если я не использую @NonCPS, я получаю следующее исключение
Error when executing always post condition:
com.cloudbees.groovy.cps.impl.CpsCallableInvocation
hudson.remoting.ProxyException:com.cloudbees.groovy.cps.impl.CpsCallableInvocation
Finished: FAILURE