Как установить агент {} в разделяемой конвейерной библиотеке в Jenkins? - PullRequest
0 голосов
/ 14 июня 2019

Я пишу разделяемую конвейерную библиотеку для проектов, использующих либо агента 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 (), защищенные некоторыми конструкциями потока управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...