Инженерия
Ветки-превью: своё окружение на каждый запрос на слияние
Как мы научились поднимать копию сервиса для каждого изменения за сорок секунд и почему это дешевле, чем общий стенд.
Общий стенд ломается в самый неподходящий момент: двое разработчиков выкатили на него свои ветки, тестировщик проверяет третью, а менеджер показывает заказчику четвёртую. Мы прожили так первые два года и решили, что каждому запросу на слияние нужно своё окружение.
Как это устроено
Когда открывается запрос на слияние, сборка кладёт образ в реестр проекта, а планировщик поднимает копию сервиса с адресом по номеру запроса. Данные берутся из обезличенного снимка, который обновляется раз в сутки. Окружение живёт, пока открыт запрос, и удаляется через час после слияния или закрытия.
# .cedar/preview.yml preview: image: $BUILD_IMAGE data: snapshot/daily ttl_after_merge: 1h resources: { cpu: 1, memory: 1Gi }
Почему это дешевле
Окружение спит, когда к нему никто не обращается: первый запрос будит его за две-три секунды. В среднем у нас одновременно живут 30-40 превью, но ресурсы реально потребляют пять-шесть. Общий стенд, который работал круглосуточно, стоил дороже.
Самый частый отзыв от команд: «мы перестали спрашивать в чате, кто сейчас на стенде».
Что пришлось решить
- миграции базы: превью получает свою схему, и откат не задевает соседей;
- внешние платёжные шлюзы: в превью они заменены песочницей с теми же ответами;
- секреты: превью видит только тестовые ключи, боевые туда не попадают никогда.
Ветки-превью доступны на тарифах «Команда» и «Корпоративный». Что изменилось в последнем выпуске - в журнале изменений.
руководитель платформенной команды Cedar
Читать дальше: Отчёт о зависимостях без паники: что чинить сегодня, а что подождёт