Что такое сборка бинарных файлов только один раз?
Одним из основополагающих принципов непрерывной доставки является создание основных или только коротких BBOO. Это означает, что двоичные артефакты должны быть собраны один раз и только один раз. Эти артефакты должны храниться в менеджере хранилища, например в хранилище Nexus . Последующие циклы развертывания, тестирования и выпуска никогда не должны пытаться собрать этот двоичный файл снова, а вместо этого повторно использовать этот двоичный файл. Это гарантирует, что один и тот же двоичный файл прошел все различные циклы тестирования и был доставлен заказчику.
Несколько раз двоичные файлы перестраивались на каждом этапе тестирования с использованием определенного тега рабочей области и считались одинаковыми. Но это по-другому! Это может оказаться таким же, но это более случайно. Это скорее не то же самое из-за различных конфигураций среды. Например, команда разработчиков может использовать JDK 8 на своем компьютере, а тестирование / размещение может использовать JDK 7. Существует множество причин, из-за которых двоичные артефакты могут различаться. Поэтому очень важно создать двоичные файлы только один раз, сохранить их в репозитории и заставить их проходить различные тестовые, промежуточные и производственные циклы. Это повышает общий уровень достоверности доставки клиенту.
Это изображение показывает, как двоичные файлы собираются один раз на этапе сборки и хранятся в хранилище Nexus. После этого этапы Deploy, Test и Release читают только двоичный файл из Nexus.
Тот факт, что dev, test и промежуточные среды различаются, — это другая проблема. И мы поговорим об этом в следующем блоге.
Как вы настраиваете сборку бинарных файлов только один раз?
А пока давайте посмотрим на настройку:
- Файл WAR приложения Java EE 7 создается один раз
- Хранить в репозитории Nexus или в локальном репозитории
.m2
- Тот же двоичный файл используется для тестирования дыма
- Этот же двоичный файл используется для запуска полного набора тестов
Тест на дым в нашем случае будет только одним тестом, а полный набор состоит из четырех тестов. Надеюсь, это не ваша типичная установка с точки зрения количества тестов, но, по крайней мере, вы увидите, как все настроить.
Также только два этапа тестирования, дым и полный, но концепция может быть легко расширена, чтобы добавить другие этапы. Последующий блог покажет полномасштабный конвейер развертывания.
Давайте начнем!
- Посмотрите тривиальный пример приложения Java EE 7 на сайте github.com/javaee-samples/javaee7-simple-sample . Это типичное приложение Java EE с конечными точками REST, компонентами CDI, сущностями JPA.
- Настройте локальный репозиторий Nexus и разверните в нем SNAPSHOT приложения как:
1
mvn deploy
По умолчанию хранилище Nexus настроено на
localhost:8081/nexus
. Запишите хост / порт, если вы используете другую комбинацию. Также запишите точный номер версии, которая развернута в Nexus. По умолчанию это будет1.0-SNAPSHOT
.Вы также можете развернуть RELEASE в этом хранилище Nexus как:
1mvn release:clean release:prepare release:perform
Запишите, используете ли вы SNAPSHOT или RELEASE.
В любом случае вы также можете указать-P release
Maven, профиль и источники и javadoc будут прикреплены к развертыванию. Так что если RELEASE развернут как:1mvn release:clean release:prepare release:perform -P release
- Ознакомьтесь с тестовым рабочим пространством на github.com/javaee-samples/javaee7-simple-sample-test . Внесите следующие изменения в этот проект:
- Измените свойство
nexus-repo
в соответствии с хостом / портом репозитория Nexus. Если вы использовали установку Nexus по умолчанию и развернули RELEASE, то ничего менять не нужно. По умолчанию Nexus имеет один репозиторий для SNAPSHOT и другой для RELEASE. Рабочая область настроена для использования репозитория RELEASE. Если вы развернули SNAPSHOT, то «релизы» вnexus-repo
должны быть изменены на «моментальные снимки», чтобы указывать на хранилище-компаньон. - Измените
javaee7-sample-app-version
чтобы оно соответствовало версии приложения, развернутого в Nexus.
- Измените свойство
- Запустите WildFly и запустите тесты дыма как:
1
mvn test -P smoketest
Это запустит все файлы, заканчивающиеся на «SmokeTest». ShrinkWrap и Arquillian выполняют тяжелую работу по разрешению файла WAR из Nexus и использованию его для запуска тестов:
123456return
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
);
Запуск тестов дыма покажет результаты как:
010203040506070809101112Running 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
- Запустите полные тесты как:
1
mvn test -P fulltest
Это запустит все файлы, включенные в ваш набор тестов, и покажет результаты как:
0102030405060708091011121314Running 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.
Узнайте больше о вашем наборе инструментов для создания этой простой, но мощной установки:
Вот некоторые другие блоги этой серии:
- Используйте CI-сервер для развертывания на Nexus
- Запускать тесты на WildFly, работающем в PaaS
- Добавить покрытие статического кода и метрики кода в тестировании
- Создайте конвейер развертывания
Наслаждайтесь!
Ссылка: | Создавайте двоичные файлы только один раз для непрерывного развертывания от нашего партнера по JCG Аруна Гупта из Miles to go 2.0… блог. |