Как вы знаете в общих библиотеках в Jenkins, в Jenkinsfile можно вызывать содержимое файла в папке vars.
Например, в папке vars в общей библиотеке у нас может быть файл с именем build.groovy
, а в файле Jenkinsfile мы можем вызвать его следующим образом:
build {
parameter1 = "some param1"
parameter2 = "some param2"
}
Как описано в этом разделе .
У меня нет проблем с созданием groovy файлов и вызовом их с помощью метода call()
в Jenkinsfile.
Но я хочу настроить конвейер и сделать его как можно более универсальным.
Поэтому я хочу вызвать groovy-файл, содержащийся в папке vars
, но в том же конвейере: вызов genericStage.groovy
в другом файле, содержащемся в той же папке vars в общей библиотеке.
Итак, у меня есть отличный файл в папке vars
: genericStage.groovy
Что у меня есть:
Pipeline{
agent{label myNode}
stages{
stage("init"){
//steps
}
genericStage{
parameter1 = "some param"
}
}
}
А в genericStage:
def call(Closure body) {
def config = [:]
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = config
body()
stage(config.parameter1){
steps{
//steps
}
}
}
Но я получаю ошибку:
Expected a stage @ line 125, column 6.
genericStage{
^
1 error
at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:310)
at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1085)
Так как делать вызовы в той же общей библиотеке, что и для Jenkinsfile?