Загрузить агент динамически в декларативном файле Jenkinsfile

Я хотел бы знать, можно ли динамически настроить глобального агента.

Мне нужно запустить мой конвейер в разных средах Jenkins, работающих на Kubernetes или виртуальных машинах.

Когда мне нужно запустить конвейер на виртуальных машинах, мне нужно использовать агент docker, пока он работает в Kubernetes, мне нужно использовать агент kubernetes.

Я пытался получить ссылку на агент и использовать эту ссылку, но это не сработало.

Некоторые примеры из моих пробных:

def myAgent = {
    return {
        kubernetes {
            containerTemplate {
                name 'maven-container'
                image 'maven:3.0.6'
                ttyEnabled true
                command 'cat'
            }
            defaultContainer 'maven-container'
        }
    }
}

pipeline {
  agent myAgent()
  //...
}

/////////////////

kube = {
    containerTemplate {
        name 'maven-container'
        image 'maven:3.0.6'
        ttyEnabled true
        command 'cat'
    }
    defaultContainer 'maven-container'
}

pipeline {

  agent {
    kubernetes kube
  }
}

Любая помощь будет оценена по достоинству.

Спасибо сенол




Ответы (1)


Проблема в том, что значения агента оцениваются до запуска конвейера, а не перед запуском этапа. Это несколько нелогично, но вот мы здесь.

Вы можете «обмануть систему», запустив конвейер со сценариями перед декларативным, как описано в этом ответе.

person MaratC    schedule 02.03.2020