Конвейер Jenkins: чтение значений из другого jenkinsfile
Я использую общую библиотеку jenkins и клонирую оттуда еще одно git-репо. Этот репо содержит файл jenkins, похожий на следующий:
#!/usr/bin/env groovy
@Library('mylib')
import jLib.*
someStage{
myparam = someValue
}
Я хочу прочитать "someValue". В настоящее время я делаю это с помощью регулярного выражения, но таким образом я могу получить только строку, а не более сложные значения, такие как карта.
В документации Shared jenkins libs значения загружаются из jenkinsfile следующим образом:
def call(body) {
// evaluate the body block, and collect configuration into the object
def config = [:]
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = config
body()
}
Как извлечь значения из файла Jenkinsfile в рабочей области аналогичным образом? Откуда берется тело?
Спасибо за ваше время
1 ответ
Я нашел решение.
Map configFromJenkinsfile(jenkinsfile){
def jenkinsfileConfig = [:]
def matches = jenkinsfile =~ /(?s)\{(.*?)\}/
def exec = new GroovyShell(new Binding(jenkinsfileConfig)).evaluate(matches[0][1])
return jenkinsfileConfig;
}
Я проверил это с передачей jenkinsFile в виде строки (после использования String projectJenkinsFile = readFile "Jenkinsfile"
)
Я выполняю часть в jenkinsfile со всеми назначениями (между '{' и '}') в groovyshell с моей картой в качестве привязки. Все назначения без типа попадают в привязку и могут быть доступны.