Как передать карту в глобальную функцию конвейера Дженкинса?

#dictionary #jenkins #groovy #jenkins-pipeline

#словарь #дженкинс #groovy #дженкинс-конвейер

Вопрос:

У меня есть глобальная функция, подобная этой:

 def myStep(Closure body) {
    def config = [:]
    body.resolveStrategy = Closure.DELEGATE_FIRST
    body.delegate = config

    body()

    echo config.name      // works
    echo config.configure // is null
}
  

Которая вызывается следующим образом:

 myStep {
    name = 'linux-build'
    configure = [os: 'linux', dir: 'build']

    echo "myStep"
}
  

Обычные переменные ( name ) работают, но переданная карта ( configure ) — нет. Может быть, это из-за def config = [:] ? Как я могу получить доступ к карте внутри функции?

Ответ №1:

Map Действительно передано, проблема в том, что echo не знаю, как справиться с Map для печати в консоли (кажется, что echo печатается только строка).

Таким образом, вы можете попробовать использовать следующий код вместо:

 echo config.configure.toString() // prints [os:linux, dir:build]
  

Или с помощью GString :

 echo "${config.configure}" // prints [os:linux, dir:build]
  

Или с помощью println :

 println config.configure // prints  {os=linux, dir=build}
  

Итак, дело в том, что Map есть ли там, чтобы вы могли получить доступ к config.configure.os или config.configure.dir без проблем, попробуйте использовать следующий код в конвейере дженкинса:

 def myStep(Closure body) {
    def config = [:]
    body.resolveStrategy = Closure.DELEGATE_FIRST
    body.delegate = config

    body()

    echo config.name      // works
    echo config.configure.os // prints linux
    echo config.configure.dir // prints buid
    println config.configure // prints {os=linux, dir=build}
}

myStep {
    name = 'linux-build'
    configure = [os: 'linux', dir: 'build']
    echo "myStep"
}
  

В консоли вывода отображается следующий результат:

 [Pipeline] echo
myStep
[Pipeline] echo
linux-build
[Pipeline] echo
linux
[Pipeline] echo
build
[Pipeline] echo
{os=linux, dir=build}
[Pipeline] End of Pipeline
Finished: SUCCESS