Важной частью головоломки при разработке веб-приложения является непрерывная доставка. Тестировщики или пользователи могут ранним доступом к альфа-версии внести свой вклад в процесс разработки. Проблемы дизайна, требований, архитектуры или производительности могут быть обнаружены гораздо раньше.
Я собираюсь показать, как настроить этот процесс, используя Maven и Jenkins. Целевая среда размещается на Tomcat7. Исходный код размещен на GitHub. Поскольку я являюсь разработчиком, который старается избегать опросов в максимально возможной степени, я собираюсь показать, как запускать этот процесс с помощью классной функции GitHub, называемой WebHooks.
1. Создать задание непрерывной доставки
Создать работу Дженкинса и интегрировать ее с Maven очень просто. Быстро охватит это:
- Создайте его с помощью «New Item» -> «Build a maven2 / 3 project»
- Настройте URL GitHub в разделе «Управление исходным кодом» (в моем случае аутентификация не требуется, потому что мой репозиторий GitHub общедоступен)
- Пропустите раздел «Построить триггеры» сейчас, вернемся к этому позже.
- Настройте раздел «Сборка», указав путь и цели POM, которые вы используете для создания файла WAR
- Настройте «Настройки сборки» -> «Уведомление по электронной почте»
Сохраните и попробуйте запустить работу Дженкинс. Это очень распространенная и базовая конфигурация работы Дженкинса. Теперь мы собираемся настроить развертывание файла WAR в Tomcat7. Но тут возникает дилемма. Есть два очень зрелых способа развертывания. Я покрою оба и позволю читателю выбрать один.
а) Непрерывная доставка с использованием tomcat7-maven-plugin
- Прежде всего нам нужно разрешить доступ в Tomcat7. Отредактируйте файл $ CATALINA_HOME / conf / tomcat-users.xml (CATALINA_HOME — домашний каталог Tomcat) и настройте роль и пользователя следующим образом.
<role rolename="manager-script"/> <user username="deployer" password="===PASSWORD===" roles="manager-script"/>
- Настройте учетные данные Tomcat7 для Maven в файле конфигурации settings.xml . Этот файл обычно находится в <user_home> /. M2 .
<server> <id>tomcat-server-alpha</id> <username>deployer</username> <password>===PASSWORD===</password> </server>
- Установите tomcat7-maven-plugin в pom.xml
<plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <url>http://[JENKINS-URL]/manager/text</url> <server>tomcat-server-alpha</server> <path>/[TOMCAT-DEPLOY-PATH]</path> </configuration> </plugin>
- Наконец добавьте дополнительную цель Maven «tomcat7: redeploy» в работу Дженкинса
б) Непрерывная доставка с использованием плагина Jenkins Deploy
- Установите плагин Jenkins Deploy
- В задании Jenkins, в котором создается WAR, настройте «Добавить действие после сборки» -> «Развернуть ear / war в контейнер»
2. Дженкинс — интеграция с GitHub
- Требование блокирования здесь — чтобы сервер Jenkins был доступен из Интернета. Если вы не можете по какой-либо причине, вы должны придерживаться опроса управления исходным кодом в Jenkins.
- Установите плагин GitHub в Jenkins
- Создать личный токен доступа в GitHub для Jenkins. Это можно найти в разделе «Редактировать свой профиль» -> «Приложения»
- Настройте плагин GitHub для использования сгенерированного токена в Jenkins. Вы можете найти этот раздел в «Управление Jenkins» -> «Настроить систему» -> «GitHub Web Hook» . Обратите внимание, что вам не нужно использовать пароль. URL API «https://api.github.com»
- Создать WebHook в Github. Открыть репозиторий -> «Настройки» -> «Webhooks & Services» -> «Создать Webhook»
- Используйте URL Jenkins с суффиксом «/ github-webhook» . Jenkins будет заменяться автоматически при настройке заданий, поэтому нет необходимости создавать ловушку GitHub для каждого задания Jenkins.
- После создания вы можете протестировать webhook через три точки в « Недавних поставках » . HTML-код ошибки «302 найдено» означает, что он работает нормально (даже когда GitHub выделяет его восклицательным знаком).
- Наконец, включите запуск GitHub в задании Jenkins
Вот и все. Коммит Github должен вызвать развертывание в Tomcat сейчас.