Как мы создали нашу службу почтовых уведомлений

Или как опыт разработчика (DX) - не уловка

Одна из наших основных целей, которые мы поставили при создании новой экосистемы BestPrice, заключалась в обеспечении ясности, абстракции и простоты, как с точки зрения об опыте конечных пользователей, но также и о том, как мы, разработчики, создаем наши вещи.

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

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

В результате опыт был непоследовательным, и его очень сложно было изменить.

С этой целью мы приступили к созданию совершенно новой платформы BPMail.

Цели

  • Шаблоны должны быть легкими в создании, изменении и развертывании даже для дизайнера.
  • Мы должны иметь возможность постоянно продвигать изменения.
  • Набор централизованных компонентов должен будет управлять новым оборудованием для обеспечения абстракции и согласованности.
  • Обеспокоенность следует разделять.

Куча

  • Реагировать
  • Webpack
  • Дженкинс
  • Пряжа
  • Узел
  • Шутка
  • Вавилон
  • Докер
  • Владелец ранчо
  • Git
  • ..и еще кое-что.

Результат - рабочий процесс

Вот что у нас получилось:

платформа на основе node и react, на которой мы можем эффективно достичь всех поставленных выше целей; Дизайнеры могут создавать и предварительно просматривать почтовые шаблоны в своих браузерах (даже без перезагрузки), а затем конвейер генерирует эти шаблоны и отправляет их на серверы.

1. Редактировать компоненты реакции, предварительный просмотр в режиме реального времени в браузере

Мы любим React. React поддерживает BestPrice.gr и большинство наших внутренних инструментов. Мы тоже живем и дышим на ES6. Webpack - наш любимый сборщик, который творит чудеса за кулисами

2. Довольны результатами? Давай!

Мы все делаем на git - хотя на то, чтобы добраться туда, у нас ушёл год. Когда мы довольны предварительным просмотром, достаточно git push.

3. Дженкинс вступает во владение

Код хранится на Github. Когда отправляется новая ветка, наш экземпляр Jenkins автоматически:

  • строит и обновляет промежуточный сервер, используя эту ветку.
  • запускает набор тестов, для которого мы используем Jest.
  • Создает образцы «писем» и скриншотов из наших предопределенных демо-данных.
  • Сообщает нам, что сборка и тесты прошли успешно.

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

Сами серверы являются контейнерами докеров, к которым файлы js смонтированы с локального диска.

Затем с помощью nodemon сервер узла перезапускается при обновлении файлов. Контейнеры управляются с помощью Rancher, поэтому для увеличения или уменьшения масштаба достаточно нажать кнопку + или задать вопрос нашему слабому боту (приятно) :)

С высоты птичьего полета

Чтобы мы могли видеть все наши текущие шаблоны с высоты птичьего полета, мы ввели дополнительный шаг, который генерирует скриншоты всех наших шаблонов при сборке (см. Изображение заголовка этого сообщения).

Это Таким образом, мы можем легко выявлять несоответствия и проблемы и вносить изменения и исправления.

Вы спросили, как это работает?

Как шарм!

Например, буквально вчера Stratos, наш иллюстратор, без какой-либо помощи и указаний со стороны разработчика, изменил контент для шаблона, глобально добавил изображение счастливой пасхи ( в компоненте нижнего колонтитула) и отправили его в производство.

Это звучит как магия, и, конечно же, кажется, что это так.

Мы довольны результат.

Следите за этим пространством, скоро у нас будет чем поделиться!

С Пасхой!

Присоединяйтесь, набираем!