Я пишу разделяемую конвейерную библиотеку для проектов, использующих либо агента Docker, либо агентов, указанных через метки. Я хочу, чтобы раздел агента {} был настраиваемым.
В обычном Jenkinsfile для проекта, использующего Docker, раздел агента выглядит следующим образом:
agent
{
docker
{
label 'docker'
image 'my-image'
}
}
Раздел агента проектов, не использующих Docker, выглядит следующим образом:
agent
{
node
{
label 'FOO'
label 'BAR'
}
}
Каков правильный синтаксис для раздела агента в общей конвейерной библиотеке lib, который может привести либо к первому, либо ко второму примеру агента {} из приведенных выше примеров?
// /vars/sharedPipeline.groovy
def call(body) {
def pipelineParams= [:]
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = pipelineParams
body()
pipeline {
agent {
// <---- What goes here? What is the value that pipelineParams.buildAgent should have?
}
}
...
}
Я хочу избежать решений, которые заставят меня:
- вручную вызвать «запуск Docker» из этапа
- проверьте этикетку, чтобы решить, что делать дальше
Обновление:
Исходя из того, что я обнаружил до сих пор, невозможно динамически выбирать между агентами Docker и Docker на верхнем уровне конвейера. Существуют некоторые обходные пути, и они требуют указания агента для каждого отдельного этапа, или они используют цепочки docker.image (). Inside (), защищенные некоторыми конструкциями потока управления.