Continuous Deployment для локального проекта
Я разрабатываю учебное вэб-приложение на Java, использоваться оно будет локально.
Среда разработки:
- Windows
- Eclipse
- Git
- В качестве сервлет контейнера предполагаю использовать Apache Tomcat
Хочу автоматизировать деплой (локальный) - т.е. чтобы при коммите мое вэб-приложение автоматически собиралось и помещалось в Tomcat (установленный локально, соответственно). Подскажите, плиз, как это делается и с помощью какого ПО?
Ответы (1 шт):
Сначала я опишу принципиальную схему, а конкретные инструменты опишу после.
Схема такая:
- после комита нужно собрать приложение (создать *.war файл)
- созданный файл развернуть на tomcat
Сборка по комиту
Тут есть два варианта.
Либо использовать post-commit хук, чтоб сам гит извещал о комите.
Либо какой-то процесс должен периодически проверять изменения и запускать сборку.
Развертывание (deploy) на томкат
У томката есть несколько возможностей развертывать приложения:
- Есть просто копирование war-файла в папку с веб-приложениями
- Есть специальное приложение Tomcat Manager с web API для развертывания
- Есть библиотека, которая интегрируется с
antи позволяет среди прочего разворачивать приложение.
Инструменты
Наверное, самый простой способ это написать самому скрипт который будет состоять из двух шагов:
- собирать приложение в war-файл (
mvn packageесли используетсяmavenc соответствующим плагином) - копировать war-файл в папку з web приложениями tomcat
Далее нужно:
- добавить
post-commitхук, чтобы скрипт запускался при комите. Тут эта тема затронута для windows в более широком контексте. - настроить автоматическое развертывание, чтобы после шага 2 скрипта приложение подхватывалось томкатом
Нужно понимать, что continuous deployment это довольно непростая процедура, так как обычно она включает среди прочего:
- запуск тестов во время сборки (и отчеты если что-то не так)
- интеграционное тестирование (+отчеты)
- сама процедура развертывания приложения может потребовать мигрировать данные в БД.
- smoke тестирование после развертывания
- возможность отката на предыдущую версию, если что-то пошло не так.
В случае локального использования, не все из этого нужно, но кое-что может понадобиться (как например, миграции БД, если требуется делать развертывание системы не с нуля каждый раз, а с сохранением данных). Зависит от ваших требований конечно.
Более сложный в настройке вариант, но и дающий больше возможностей, это использование системы типа jenkins. В этом случае есть готовые плагины, которые могут помочь решить некоторые из описанных задач.
Цена за это удобство сложность конфигурирования и необходимость администрирования. В этом случае может быть удобно запускать jenkins в docker для удобства развертывания самого jenkins.