#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