Как показано в Расширение с помощью общих библиотек , этот подход (который я также использую) позволяет:
- сохранять содержимое Jenkinsfile для минимум
- обеспечивает стандартный способ выполнения определенной работы (как указано в общей библиотеке)
Эта общая библиотека становится шаблоном процесса длякоторый вы предоставляете только значения в вашем Jenkinsfile, прежде чем делегировать фактическое выполнение в предопределенную библиотеку.
OP Асиф Камран Малик обратите внимание, что документация действительно включает :
Существует также трюк с «шаблоном построения», использующий Groovy Closure.DELEGATE_FIRST
, который позволяет Jenkinsfile выглядеть немного больше как файл конфигурации, чем как программа, но это более сложный и подверженный ошибкам ине рекомендуется.
Затем он спрашивает:
Почему блоггер предпочел такой способ, когда его фактически не одобряют в официальном документе.
Я проверяюd и мы также используем Closure.DELEGATE_FIRST
.
Причина в том, что "разрешает Jenkinsfile выглядеть немного больше как файл конфигурации, чем как программа" *
. Это избавляет нас от необходимости определять блок JSON,и сохраняйте параметр в виде последовательности key=value
строк, которые легче читать.
Тогда вызов разделяемой библиотеки будет следующим:
#!/usr/bin/env groovy
@Library("MyLibraries") _
MyLibrary {
config1 = 'value1'
config2 = 'value2'
...
}
{
anotherConfigA = 'valueA'
anotherConfigB = 'valueB'...
astep(
...
)
}
Тогда ваши ДженкинсШаблон конвейера в MyLibraries/vars/MyLibrary.yml
может использовать эти блоки закрытия:
def call(Closure configBlock, Closure body) {
def config = [:]
configBlock.resolveStrategy = Closure.DELEGATE_FIRST
configBlock.delegate = config
configBlock()
astep(
...
){
if (body) { body() }
}
}