Статьи

Google Appengine Staging Server Howto

Google App Engine из коробки поддерживает версионное развертывание. Вы можете очень легко переключаться между ревизиями, что является отличной функцией для правильного тестирования приложения перед началом работы. Существует одна серьезная проблема: все версии приложения находятся в одном хранилище данных. Поэтому, если вы переносите данные, вы рискуете повлиять на текущее производственное приложение. Отсюда необходимость правильной постановочной среды.

Не секрет, я фанат Google App Engine. Как только вы привыкнете к его особенностям, у него появляется ряд основных преимуществ . С тех пор, как я начал внедрять некоторые идеи непрерывной интеграции / бережливого запуска в свой собственный проект . Я столкнулся с проблемой общего хранилища данных, и стала очевидной необходимость в правильно изолированной промежуточной среде.

Вот как я это сделал.

Настройка промежуточного приложения

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

  1. В панели управления appengine создайте второе приложение. У вас есть 10 бесплатных, так что это не должно быть проблемой. Я добавил суффикс «-staging» к названию тестируемого приложения, чтобы не перепутать одно с другим.
  2. Если вы хотите начать с копии существующего хранилища данных, вы можете экспортировать все хранилище данных с помощью набора разработки Python . Даже если вы используете комплект разработки Java, стоит его настроить. Это позволяет создавать резервные копии вашего хранилища данных, которые могут пригодиться, когда что-то действительно испортилось.
  3. Затем импортируйте базу данных в ваше промежуточное приложение, используя тот же инструмент.
  4. И, наконец, разверните свое приложение в промежуточном приложении. Если вы используете 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"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
        <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