Не секрет, я фанат Google App Engine. Как только вы привыкнете к его особенностям, у него появляется ряд основных преимуществ . С тех пор, как я начал внедрять некоторые идеи непрерывной интеграции / бережливого запуска в свой собственный проект . Я столкнулся с проблемой общего хранилища данных, и стала очевидной необходимость в правильно изолированной промежуточной среде.
Вот как я это сделал.
Настройка промежуточного приложения
Для создания изолированного хранилища данных можно использовать пространства имен, однако я не хотел создавать дополнительный код для тестирования. Поэтому я выбрал другой подход, который, как мне кажется, намного проще и менее подвержен ошибкам:
- В панели управления appengine создайте второе приложение. У вас есть 10 бесплатных, так что это не должно быть проблемой. Я добавил суффикс «-staging» к названию тестируемого приложения, чтобы не перепутать одно с другим.
- Если вы хотите начать с копии существующего хранилища данных, вы можете экспортировать все хранилище данных с помощью набора разработки Python . Даже если вы используете комплект разработки Java, стоит его настроить. Это позволяет создавать резервные копии вашего хранилища данных, которые могут пригодиться, когда что-то действительно испортилось.
- Затем импортируйте базу данных в ваше промежуточное приложение, используя тот же инструмент.
- И, наконец, разверните свое приложение в промежуточном приложении. Если вы используете Eclipse, просто измените идентификатор приложения, если нет, вы можете найти это свойство в appengine-web.xml.
Небольшое примечание об использовании производственных данных в ваших тестах: будьте очень осторожны с этим. Вы можете захотеть анонимизировать некоторые данные и удалить все, что может быть удаленно конфиденциальным.
Это должно быть так. На самом деле ничего особенного в этом не было, но теперь у вас должна быть полнофункциональная копия вашего рабочего приложения. Немного поработайте, чтобы убедиться, что все работает быстро.
Когда вы счастливы, давайте автоматизировать это.
Автоматизация развертываний
Я собирался выбросить Maven , но теперь я создал установку, которой я очень доволен. Так что Мэйвен здесь, чтобы остаться на время. Как и плагин Maven Eclipse и плагин GAE для Maven .
Именно благодаря maven-gae-plugin я смог автоматизировать промежуточные и производственные развертывания. Который дал мне очень воспроизводимую сборку и настройку развертывания.
Чтобы беспрепятственно создать сборку как для промежуточного, так и для рабочего сервера, я использую профили Maven и его способность фильтровать ресурсы при их копировании .
В appengine-web.xml я добавил переменную gae.application:
1
2
3
4
|
<? xml version = "1.0" encoding = "utf-8" ?> < application >${gae.application}</ application > ... |
Далее я включил фильтрацию appengine-web.xml (все следующие несколько битов идут в pom.xml):
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
< plugin > < groupId >org.apache.maven.plugins</ groupId > < artifactId >maven-war-plugin</ artifactId > < configuration > < webResources > < resource > < directory >src/main/webapp</ directory > < filtering >true</ filtering > < includes > < include >**/appengine-web.xml</ include > </ includes > </ resource > </ webResources > </ configuration > </ plugin > |
В разделе свойств я добавил приложение по умолчанию, которое является промежуточным. Это дает мне уверенность в том, что я всегда буду развертываться в промежуточной среде, если только я действительно не хочу идти в производство:
1
2
3
|
< properties > < gae.application >myapp-staging</ gae.application > </ properties > |
И для развертывания производства я создал профиль:
1
2
3
4
5
6
7
8
|
< profiles > < profile > < id >production</ id > < properties > < gae.application >myapp</ gae.application > </ properties > </ profile > </ profiles > |
С этой конфигурацией я могу легко запустить локальный сервер разработки:
> mvn gae: беги
Развернуть на промежуточном сервере:
> mvn gae: развернуть
И когда я буду счастлив, разверните его на производственном сервере:
> mvn gae: развернуть -производство
Помимо имени приложения, вы также можете настроить другие свойства, которые отличаются между настройкой теста и производственной. Например, я использую серверы разработки PayPal локально и на промежуточном сервере, но настоящий сайт PayPal в производстве.
Вывод
С довольно простой конфигурацией Maven можно создать очень воспроизводимую среду сборки и развертывания. Добавьте сервер непрерывной интеграции, и вы на пути к идеальной настройке Lean.
Ссылка: документация по Google Appengine Staging Server от нашего партнера JCG