Не секрет, я фанат 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