В Envoy наши развертывания полностью автоматизированы. В этом посте мы хотим показать вам, как мы интегрировали стратегию «быстрого развертывания» с помощью таких инструментов, как GitHub, Travis, Slack и Dockbit.

Мы размещаем наши активы в S3. До развертывания Ember CLI Deploy самым простым способом загрузки ресурсов, вероятно, было использование специальной задачи ворчания, выполнение которой могло легко превратиться в несколько часов удара головой о стену.

Сегодня того же процесса можно достичь, запустив ember install ember-cli-deploy-s3 и затем настроив файл развертывания с вашими учетными данными AWS.

Мы используем S3 для обслуживания нашего index.html вместо Redis. Для этого мы используем ember-cli-deploy-s3-index, который также позволяет нам загружать различные версии перед тем, как сделать их доступными для наших пользователей.

Наш файл конфигурации выглядит следующим образом:

Если настроены оба подключаемых модуля, для развертывания нашей панели мониторинга нужно запустить этап развертывания ember или развернуть производство ember. Затем мы можем активировать ревизию с помощью ember deploy: activate production -r revision.

Если мы не уверены, какую версию активировать, мы можем посмотреть список, в котором выполняется ember deploy: list staging.

Автоматизируйте обыденное

После того, как Ember CLI Deploy заработала, что-то еще пошло не так. Мы все еще выполняли некоторые ручные задачи, такие как запуск команды развертывания для отправки PR на постановку или даже загрузка и активация последней фиксации в производстве.

Одна из основных ценностей Envoy - автоматизация повседневных задач, и, учитывая эту ценность, мы решили пойти глубже и упростить процесс развертывания.

Наши требования были:

  1. Автоматическое развертывание для каждого PR, прошедшего все тесты.
  2. Разверните каждое слияние в мастере для подготовки и производства.
  3. Прикрепите уведомление к PR в GitHub, чтобы мы могли легко протестировать его при постановке.
  4. Сделайте master индексом по умолчанию при постановке.
  5. Сообщите нам в Slack, что новая версия готова к активации в производстве.

Трэвис

Для автоматического развертывания в промежуточной стадии мы создали в Travis ловушку after_sucess, которая вызывает пользовательский скрипт после прохождения тестов. Наш сценарий называется travis_deploy.sh и имеет следующее содержимое:

Предыдущий сценарий всегда развертывает фиксацию в промежуточной стадии, и, если мы находимся на «ведущем», она также развертывается в производственной среде. Здорово! На одну рутинную работу меньше, но нам все еще не хватало шагов с 3 по 5: PR-уведомления и сообщение о резерве.

GitHub

API GitHub позволяет нам создавать события развертывания и прикреплять их к разным PR. Мы используем это, чтобы прикрепить уведомление при запуске развертывания, а затем включить ссылку на версию в промежуточной стадии после ее развертывания.

Мы используем следующий сценарий под названием «deploy-to-staging.rb» для генерации уведомления выше:

Затем мы отредактировали наш сценарий развертывания, поэтому приведенный выше сценарий вызывается только в том случае, если текущая ветвь не является главной. Также мы автоматически активируем постановку, если ветка является главной:

После того, как мы выполнили требования 3 и 4, нам оставалось только добавить уведомления о резерве.

Слабина

Чтобы получать уведомление в Slack, мы добавили входящий веб-перехватчик, а затем после активации постановки добавили следующее:

Каждый раз, когда мастер развертывается в производственной среде (помните, что мы не активируем по умолчанию), мы получаем следующее сообщение:

Так просто, мы получили пятое требование.

Все было счастьем и всем этим джазом. Но мы по-прежнему запускали ручную команду для активации последней версии в мастере. Используя в качестве примера приведенную выше ревизию, одному из наших инженеров пришлось бы перейти к своему терминалу и запустить что-то вроде ember deploy: activate production -r 926e624, что превратилось в скучную задача.

Докбит

Мы начали использовать Dockbit для автоматизации развертывания нашего API через Slack, и мы решили сделать то же самое для нашей панели инструментов.

После добавления репозитория мы создали новый конвейер, в один шаг выполнив следующие действия:

Dockbit был недостающей частью нашего рабочего процесса, и он помог нам автоматизировать процесс развертывания. Теперь любой может активировать выполнение одной команды в Slack. Мы отредактировали наш сценарий «after_success», включив в него команду активации, что упростило нам активацию:

Подведение итогов

Термин быстрое развертывание, вероятно, появился в сообществе Ember после выступления Люка Мелиа на RubyConf 2014: Молниеносное развертывание вашего приложения JavaScript с поддержкой Rails.

Через два года после этого тот же процесс можно довольно легко воспроизвести с помощью упомянутых выше инструментов.

Ember CLI Deploy упрощает работу с активами. Travis, GitHub и Slack позаботятся о загрузке и уведомлениях, а Dockbit позволяет всем членам команды наконец-то отправить код в производство.

Есть ли у вас другой рабочий процесс развертывания приложений Ember? Мы хотели бы услышать об этом! В Envoy мы любим учиться у других и всегда ищем новые способы улучшить наши процессы.