Автоматическое развертывание приложения с Maven и Wildfly

в 18:04, , рубрики: devops, maven, wildfly, администрирование, системное администрирование

Привет! Начать хочу с небольшой статьи мануала, как подружить WildFly с Maven.

Wildfly – Это ребрендинг и развитие JBoss AS7/EAP6 в области как администрирования, так и API для разработчика. Wildfly построен с использованием Java SE 7. Отлично интегрируется с основными Java IDE. Краткая цитата из статьи

Немного официальной информации о 10 версии

  • Реализация сертифицирована на соответствие Full- и Web-профилям Java EE 7. Код WildFly распространяется под лицензией LGPL;
  • В отличие от коммерческого продукта JBoss Enterprise Application Platform, позиционируемого как полностью протестированная и сертифицированная платформа Java EE, WildFly ориентирован, прежде всего, на продвижение технологий. WildFly выступает в роли upstream-проекта для коммерческого продукта JBoss Enterprise. В качестве основной области использования WildFly рассматривается разработка и быстрое внедрение прототипов.

Основные особенности релиза

  • Прекращена поддержка Java 7, что позволило обеспечить более глубокую интеграцию с Java 8 Runtime. Добавлена поддержка текущих снапшотов Java 9;
  • Поставка ActiveMQ Artemis в качестве брокера рассылки сообщений (Java Message Service Broker), совместимого на уровне протокола и заменившего собой HornetQ;
  • Поддержка запуска хост-контроллера при помощи CLI. Новая команда embed-host-controller позволяет редактировать содержимое файлов domain.xml и host.xml без запуска дополнительных процессов или открытия сетевых сокетов;
  • Поддержка JavaScript в http-сервере Undertow.io, позволяющая создавать на языке JavaScript серверные скрипты, которые могут обращаться к CDI Beans и JPA Entity Beans. Указанную возможность удобно использовать для создания внешних обвязок или REST-обработчиков. Отредактированный код JavaScript становится доступен сразу и не требует перезапуска приложения;
  • Поддержка одиночного отказоустойчивого развёртывания приложения («singleton deployment»), при котором в случае использования группы кластеризованных серверов развёртывание будет произведено только на одном узле, но в случае выхода этого узла из строя, приложение будет автоматически перенесено на другой узел;
  • Поддержка одиночного отказоустойчивого брокера рассылки сообщений (Singleton MDB), запускающего доставку только на одном узле, но в случае сбоя использующего для обработки сообщений другой узел;
  • Автоматический выбор размера пула SLSB и MDB, в зависимости от имеющихся системных ресурсов;
  • Средства для миграции устаревших подсистем, таких как jbossweb (AS 7.1), jacorb (WildFly 8) и hornetq (WildFly 9), которые автоматизируют преобразование старых конфигураций в эквиваленты, работающие в WildFly 10;
  • В реализации Hibernate 5 значительно улучшено качество байткода, внесены оптимизации производительности и добавлены улучшения в API.

Хочу рассказать об автоматическом деплое в Wildfly с помощью Maven, а так же рассказать кратко о запускe UI в том же самом контейнере.

Необходимо использовать Maven версии не ниже 3.3.9( использую maven 3.5.0 ), иначе Wildfly Plugin не будет работать.

Версия Wildfly, который на данный момент использую — 10.1.0-Final, версия плагина — 1.2.0.Alpha4

В Pom.XML собираемого приложения необходимо прописать данные для подключения к серверу Wildfly

Пример:

            <plugin>
                <groupId>org.wildfly.plugins</groupId>
                <artifactId>wildfly-maven-plugin</artifactId>
                <configuration>
                    <hostname>${wildfly-hostname}</hostname>
                    <port>${wildfly-port}</port>
                    <username>${wildfly-username}</username>
                    <password>${wildfly-password}</password>
                    <name>${wildfly-name}</name>
                </configuration>
            </plugin>

Так же хорошей практикой может быть вынос настроек в settings.xml либо в pom.xml уровнем выше. Это позволит так же использовать профили при деплое – локальный деплой, деплой на прод.

Область профилей в settings.xml.

        <profile>
            <id>localhost</id>
            <properties>
                <wildfly-hostname>localhost</wildfly-hostname>
                <wildfly-port>9990</wildfly-port>
                <wildfly-username>admin</wildfly-username>
                <wildfly-password>admin</wildfly-password>
                <wildfly-name>core.war</wildfly-name>
            </properties>
        </profile>
        <profile>
            <id>dev</id>
            <properties>
                <wildfly-hostname>Prod_Server</wildfly-hostname>
                <wildfly-port>9990</wildfly-port>
                <wildfly-username>admin</wildfly-username>
                <wildfly-password>admin</wildfly-password>
                <wildfly-name>core-prod_vers.war</wildfly-name>
            </properties>
        </profile>

После всех настроек, с помощью maven, из командной строки, из IDE, из, например, Jenkins (maven plugin), можно будет деплоить war c помощью mvn wildfly:deploy, так же можно использовать mvn wildfly:undeploy и mvn wildfly:redeploy для удаления и передеплоя соответственно. Выбор профиля -Plocalhost позволит запускать с настройками из профиля с id localhost, -Pdev соответственно запускает для прода( все данные в настройках дефолтны или вымышлены).

При верной настройке в WildFly консоле в разделе deployments у Вас появится необходимый war.

Кроме этого, WildFly позволяет запускать UI.

Настройка WildFly для запуска UI:

Проект помещать в корень WildFLy в директорию, которую Вы сами выберете для Вашего UI.
В данном примере я использовал директорию UI.

В файле /PathToWildfly/standalone/configuration/standalone.xml необходимо добавить строки(строки с учетом соседних строк, для облегчения поиска):

<location name="/" handler="welcome-content"/>
<location name="/UI/" handler="UI"/>
    <filter-ref name="server-header"/>
    <filter-ref name="x-powered-by-header"/>

<handlers>
    <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
    <file name="UI" path="${jboss.home.dir}/UI/widget/build"/>

После этого WildFLy автоматически подхватывает изменения и по адресу localhost:8080/UI будет доступно ваше приложение.

На данный момент запуск был осуществлен с помощью команды ./standalone.sh -b=0.0.0.0 -bmanagement=0.0.0.0, приложение работает на Linux Oracle в screen.

За время использования были выявлены 2 проблемы:

  1. Иногда перезапуск WildFLy затягивается и долго подтягивается localhost:9990 — консоль.
  2. При запуске из Jenkins на Maven 3.3.9 с тэгом redeploy происходит утекание памяти и приложение удаляет обе версии war и ругается на дубликат. (Воспроизводится не всегда)

Данная связка около 2 месяцев, кроме вышеописанных, проблем не встречал. Всем рулит Jenkins в данном случае, он стартует и mvn wildfly:undeploy mvn wildfly:deploy ( использую такую стратегию, т.к. redeploy не отрабатывает) и доставляет собранный UI в директорию UI, обновление происходит по ночам, полёт нормальный.

Так же тестировал запуск на win хосте, отличий не заметил в работе, все так же стабильно.

Автор: SicYar

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js