Как настроить установку Maven в Jenkins на отдельный Slave node?
Симптомы
Если я создаю задание Maven в Jenkins (New Item = > Maven project) со всеми значениями по умолчанию и запустил его, я получаю эту ошибку:
Started by user anonymous
Building on master in workspace /var/lib/jenkins/jobs/job_name/workspace
ERROR: A Maven installation needs to be available for this project to be built.Either your server has no Maven installations defined, or the requested Maven version does not exist.
Finished: FAILURE
Maven отлично работает из командной строки только с mvn
.
Неприемлемое обходное решение
Существует общая система Jenkins для установки Maven: Управление Jenkins = > Настройка System = > Установка Maven/Maven. И если я добавлю установку Maven с помощью этого веб-интерфейса (предоставив предварительно установленный путь в MAVEN_HOME
как /usr/share/maven
), задание выполняется УСПЕШНО.
Вопрос: почему это глобальная конфигурация Jenkins, а не Slave-specific?
Глобальная конфигурация Jenkins не имеет смысла: Maven запускается на Slave, а не на Jenkins.
Зоопарк Slaves, где выполняются задания Jenkins, может содержать ведомые устройства с различными платформами, операционными системами, средами, где разные версии Maven установлены в разных местах.
Вопрос: Как мне настроить установку Maven для ведомого node?
Настройка переменных окружения, таких как MAVEN_HOME
и M2_HOME
, на тот же путь для всей системы на Slave node не работает.
Версия
Оба Jenkins Master и Slave - это хосты Linux. Версия Jenkins: 1.598
Ответы
Ответ 1
Предполагая, что на вашем подчиненном устройстве установлены Java и Maven:
- Перейдите к разделу Управление Jenkins → Управление узлами
- Нажмите значок конфигурации на node, который вы хотите настроить
- Прокрутите вниз до "Node" Свойства "и отметьте галочкой" Места расположения инструментов "
- Заполните параметры Java и Maven.
Теперь он должен работать (даже если вы сконфигурировали установку Maven на главном сервере).
Ответ 2
Если вы НЕ добавляете Maven в конфигурацию Master, и вы просто устанавливаете его на каждом подчиненном устройстве со своими, возможно, разными переменными среды (пример с версией 3.2.5).
M2_HOME=C:\apache-maven-3.2.5
M2=C:\apache-maven-3.2.5\bin
Path+=;C:\apache-maven-3.2.5\bin
то каждый подчиненный Jenkins будет использовать Maven с локальными настройками.
Ответ 3
Для меня решение состояло в том, чтобы перейти к управлению Jenkins → Global Tool Configuration и настроить там maven. Вы можете получить доступ к этому через /configureTools (например: http://your-ip:8080/jenkins/configureTools)
Пример:
Установка Maven
- Имя: my_maven_3.3.9
- MAVEN_HOME:/usr/share/maven
Дополнительные настройки для других обычных инструментов в /configureTools:
Git установки
- Имя: my_git_2.11.0
- Путь к исполняемому файлу Git:/usr/bin/git
Установка JDK
- Имя: my_jdk_1.8.0_161
- JAVA_HOME:/opt/jdk/jdk1.8.0_161