Динамические конфигурации AppEngine с использованием Gradle, часть 2

В предыдущем рассказе Динамические конфигурации AppEngine с использованием Gradle, часть 1 мы обсуждали, как мы можем легко выполнить развертывание в различных средах, таких как (prod, stag, test), с использованием простого аргумента gradle. Если вы не читали раньше, рекомендую прочитать, прежде чем продолжить.

Теперь давайте посмотрим, как мы можем иметь несколько файлов конфигурации (cron.xml, appengine-web.xml, queue.xml) для каждой из этих сред.

Дополнительные файлы конфигурации

Эти файлы конфигурации управляют дополнительными функциями, которые применяются ко всем службам в приложении:

Чтобы иметь разные конфигурации для каждой среды, мы собираемся создать одну папку с именем gaeconfigs в корневой папке, а затем создать одну папку для каждой среды, как показано ниже:

Теперь добавьте эти файлы конфигурации для каждой среды, и это будет выглядеть примерно так:

Теперь вы можете редактировать или оптимизировать конфигурации в соответствии со средой, например

  • для очередей скорость обработки составляет 10 / с для постановки, а для производства - 100 / с.
  • Обработка данных Cron должен запускаться каждые 5 минут в производственной среде, но для постановки это может быть каждый час.

А как насчет общих конфигураций для всех сред?

Иногда определенные конфигурации не меняются для каждой среды, например datastore-indexes.xml, или у вас одинаковые настройки для всех сред, в таком случае поместите эти конфигурации непосредственно в папку gaeconfigs, мы будем обрабатывать их как хорошо. Нравиться,

Все готово, теперь нам нужно использовать эти конфигурации во время развертывания. Мы собираемся сделать это с помощью задачи gradle,

Давайте разберемся, что происходит. Во-первых, мы объявляем необходимый путь к каталогу:

def configDir = "${project.projectDir}/gaeconfigs"
def targetDir = "${buildDir}/exploded-" + project.name + "/WEB-INF"
def envName = getDeployConfig().mode //live or stag etc

configDir: указывает на папку gaeconfigs
envName: значение среды например live, stag или alpha
targetDir: указывает на appengine Каталог WEB-INF explodedWar, который будет иметь форму build/exploded-{your-project-name}/WEB-INF

Затем мы копируем общие конфигурации из папки gaeconfigs, например (datastore-indexes.xml, dos.xml), в каталог WEB-INF, и это игнорирует папки среды со следующим кодом :

from configDir
include '*.xml'
into targetDir

Затем, в зависимости от флага режима, который передается во время выполнения задачи, мы копируем конфигурации из каталога среды конкретного режима в каталог WEB-INF,

// copying env based configs
from fileTree(configDir + "/" + envName)
include '*.xml'
into targetDir

Например, если установлен режим -Pmode=live, копируются файлы из gaeconfigs/live. Наконец, мы связываем эту задачу с задачей explodedWar, которая будет вызываться во время локального запуска или во время развертывания.

explodeWar.finalizedBy copyGaeConfig

Вот и все. Легко, правда? Теперь для развертывания просто выполните следующую команду, которая автоматически копирует необходимые конфигурации

gradle appengineDeploy -Pmode=live

Давайте посмотрим на еще один важный файл конфигурации, который мы еще не рассмотрели.

Appengine-web.xml

Это основной файл для указания информации о вашем приложении и определения того, какие файлы в WAR приложения являются статическими (например, изображениями), а какие - файлами ресурсов, используемыми приложением.

В отличие от других конфигураций, этот файл специфичен для отдельного модуля (службы). Давайте посмотрим на образец файла appengine-web.xml,

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

Для этого сначала изменим файл appengine-web.xml, как показано ниже:

Ничего не заметили? проверь это,

<instance-class>@INSTANCE_CLASS@</instance-class>
@SCALING_CONFIG@

мы просто заменили статические значения на имена заполнителей @ INSTANCE_CLASS @ и @ SCALING_CONFIG @ который будет заменен во время развертывания с помощью следующей задачи,

Итак, в функции getGaeWebXmlConfig() на основе флага режима мы устанавливаем значения для INSTANCE_CLASS и SCALING_CONFIG , обратите внимание на масштабирование, мы добавили целую кучу настроек только для live и alpha, но для постановки используются значения по умолчанию (что также помогает снизить затраты на постановку).

И в задаче explodeWar мы читаем файл appengine-web.xml и заменяем свойства заполнителя на сгенерированный, и, наконец, он записывается в каталог сборки.

Примечание. Исходный appengine-web.xml файл останется нетронутым

Это все. Теперь каждый раз, когда вы запускаете следующую команду

gradle appengineDeploy -Pmode=live

все конфигурации, основанные на среде, автоматически настраиваются и копируются в каталог сборки. Дополнительные сведения см. в демонстрационном приложении на GitHub



Заключение

Вот и все уловки для этой истории. Используя эти методы, вы также можете выполнять другие виды конфигурации и подготовки, такие как копирование настроек приложения, флагов, учетных данных и т. Д. И если вы посмотрите на это, мы просто значительно упростили развертывание.

Спасибо за прочтение! Удачного развертывания…

Вот еще одна полезная ссылка,

Эта история опубликована в The Startup, крупнейшем предпринимательском издании Medium, за которым следят +393 714 человек.

Подпишитесь, чтобы получать наши главные новости здесь.