Конвейер 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 с моей картой в качестве привязки. Все назначения без типа попадают в привязку и могут быть доступны.

Другие вопросы по тегам