Статьи

Создавайте двоичные файлы только один раз для непрерывного развертывания

Что такое сборка бинарных файлов только один раз?

Одним из основополагающих принципов непрерывной доставки является создание основных или только коротких BBOO. Это означает, что двоичные артефакты должны быть собраны один раз и только один раз. Эти артефакты должны храниться в менеджере хранилища, например в хранилище Nexus . Последующие циклы развертывания, тестирования и выпуска никогда не должны пытаться собрать этот двоичный файл снова, а вместо этого повторно использовать этот двоичный файл. Это гарантирует, что один и тот же двоичный файл прошел все различные циклы тестирования и был доставлен заказчику.

Несколько раз двоичные файлы перестраивались на каждом этапе тестирования с использованием определенного тега рабочей области и считались одинаковыми. Но это по-другому! Это может оказаться таким же, но это более случайно. Это скорее не то же самое из-за различных конфигураций среды. Например, команда разработчиков может использовать JDK 8 на своем компьютере, а тестирование / размещение может использовать JDK 7. Существует множество причин, из-за которых двоичные артефакты могут различаться. Поэтому очень важно создать двоичные файлы только один раз, сохранить их в репозитории и заставить их проходить различные тестовые, промежуточные и производственные циклы. Это повышает общий уровень достоверности доставки клиенту.

techtip74-bboo-e1424855321334

Это изображение показывает, как двоичные файлы собираются один раз на этапе сборки и хранятся в хранилище Nexus. После этого этапы Deploy, Test и Release читают только двоичный файл из Nexus.

Тот факт, что dev, test и промежуточные среды различаются, — это другая проблема. И мы поговорим об этом в следующем блоге.

Как вы настраиваете сборку бинарных файлов только один раз?

А пока давайте посмотрим на настройку:

  1. Файл WAR приложения Java EE 7 создается один раз
  2. Хранить в репозитории Nexus или в локальном репозитории .m2
  3. Тот же двоичный файл используется для тестирования дыма
  4. Этот же двоичный файл используется для запуска полного набора тестов

Тест на дым в нашем случае будет только одним тестом, а полный набор состоит из четырех тестов. Надеюсь, это не ваша типичная установка с точки зрения количества тестов, но, по крайней мере, вы увидите, как все настроить.

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

Давайте начнем!

  1. Посмотрите тривиальный пример приложения Java EE 7 на сайте github.com/javaee-samples/javaee7-simple-sample . Это типичное приложение Java EE с конечными точками REST, компонентами CDI, сущностями JPA.
  2. Настройте локальный репозиторий Nexus и разверните в нем SNAPSHOT приложения как:
    1
    mvn deploy

    По умолчанию хранилище Nexus настроено на localhost:8081/nexus . Запишите хост / порт, если вы используете другую комбинацию. Также запишите точный номер версии, которая развернута в Nexus. По умолчанию это будет 1.0-SNAPSHOT .

    Вы также можете развернуть RELEASE в этом хранилище Nexus как:

    1
    mvn release:clean release:prepare release:perform

    Запишите, используете ли вы SNAPSHOT или RELEASE.
    В любом случае вы также можете указать -P release Maven, профиль и источники и javadoc будут прикреплены к развертыванию. Так что если RELEASE развернут как:

    1
    mvn release:clean release:prepare release:perform -P release
  3. Ознакомьтесь с тестовым рабочим пространством на github.com/javaee-samples/javaee7-simple-sample-test . Внесите следующие изменения в этот проект:
    1. Измените свойство nexus-repo в соответствии с хостом / портом репозитория Nexus. Если вы использовали установку Nexus по умолчанию и развернули RELEASE, то ничего менять не нужно. По умолчанию Nexus имеет один репозиторий для SNAPSHOT и другой для RELEASE. Рабочая область настроена для использования репозитория RELEASE. Если вы развернули SNAPSHOT, то «релизы» в nexus-repo должны быть изменены на «моментальные снимки», чтобы указывать на хранилище-компаньон.
    2. Измените javaee7-sample-app-version чтобы оно соответствовало версии приложения, развернутого в Nexus.
  4. Запустите WildFly и запустите тесты дыма как:
    1
    mvn test -P smoketest

    Это запустит все файлы, заканчивающиеся на «SmokeTest». ShrinkWrap и Arquillian выполняют тяжелую работу по разрешению файла WAR из Nexus и использованию его для запуска тестов:

    1
    2
    3
    4
    5
    6
    return Maven.configureResolver()
           .withRemoteRepo("local-nexus", System.getProperty("nexus-repo"), "default")
           .resolve("org.javaee7.sample:javaee7-simple-sample:war:"
              + System.getProperty("javaee7-sample-app-version"))
           .withoutTransitivity()
           .asSingle(WebArchive.class);

    Запуск тестов дыма покажет результаты как:

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    Running org.javaee7.sample.PersonResourceSmokeTest
    Feb 25, 2015 2:00:39 PM org.xnio.Xnio <clinit>
    INFO: XNIO version 3.2.0.Beta4
    Feb 25, 2015 2:00:39 PM org.xnio.nio.NioXnio <clinit>
    INFO: XNIO NIO Implementation Version 3.2.0.Beta4
    Feb 25, 2015 2:00:40 PM org.jboss.remoting3.EndpointImpl <clinit>
    INFO: JBoss Remoting version (unknown)
    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 4.895 sec - in org.javaee7.sample.PersonResourceSmokeTest
     
    Results :
     
    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
  5. Запустите полные тесты как:
    1
    mvn test -P fulltest

    Это запустит все файлы, включенные в ваш набор тестов, и покажет результаты как:

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    Running org.javaee7.sample.PersonResourceSmokeTest
    Feb 25, 2015 2:35:38 PM org.xnio.Xnio <clinit>
    INFO: XNIO version 3.2.0.Beta4
    Feb 25, 2015 2:35:38 PM org.xnio.nio.NioXnio <clinit>
    INFO: XNIO NIO Implementation Version 3.2.0.Beta4
    Feb 25, 2015 2:35:38 PM org.jboss.remoting3.EndpointImpl <clinit>
    INFO: JBoss Remoting version (unknown)
    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.388 sec - in org.javaee7.sample.PersonResourceSmokeTest
    Running org.javaee7.sample.PersonResourceTest
    Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.265 sec - in org.javaee7.sample.PersonResourceTest
     
    Results :
     
    Tests run: 4, Failures: 0, Errors: 0, Skipped: 0

    В обоих случаях при тестировании дыма и полном тестировании используется двоичный файл, развернутый в Nexus.

Узнайте больше о вашем наборе инструментов для создания этой простой, но мощной установки:

arquillian-логотип

связующей логотип

wildfly-логотип

Вот некоторые другие блоги этой серии:

  • Используйте CI-сервер для развертывания на Nexus
  • Запускать тесты на WildFly, работающем в PaaS
  • Добавить покрытие статического кода и метрики кода в тестировании
  • Создайте конвейер развертывания

Наслаждайтесь!