Инженерия

Процесс управления релизами для частых выпусков

6 мин чтения

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

Это руководство рассчитано на команду из 5-50 инженеров, которая выкатывает раз в неделю или каждый день и хочет, чтобы процесс не мешал.

ШагВладелецКритерий выхода
1. Спланировать объёмПродакт или техлидСписок изменений в этом релизе записан, рискованное отмечено
2. Ветка или флагИнженер, которому принадлежит изменениеРабота в короткоживущей ветке или за флагом, так что main остаётся готовым к выпуску
3. Сборка и тестыCI, автор на связи при сбояхПайплайн зелёный на том самом коммите, который пойдёт в релиз
4. ОдобрениеРевьюер, а для рискованных изменений ещё и релиз-менеджерРевью пройдено, путь отката назван, решение «go» или «no-go» записано
5. Выкатка и проверкаРелиз-менеджер или дежурный инженерВыкачено, smoke-проверки проходят, доля ошибок и задержка совпадают с уровнем до релиза
6. СообщитьТот, кто понимает изменение, с правкой от того, кто не понимаетRelease notes опубликованы там, где их читают пользователи, поддержка и продажи в курсе
7. Разбор итоговРелиз-менеджерМетрики прочитаны, у всего, что пошло не так, есть владелец и исправление

Что такое процесс управления релизами?

Это повторяемый путь, который проходит изменение, чтобы дойти до пользователей: объём, сборка, тесты, одобрение, выкатка, проверка, объявление и взгляд назад. Смысл записать его в том, что каждый релиз идёт одним и тем же путём, и тот, кто в отпуске, новичок или дежурный инженер в два часа ночи могут пройти его, не спрашивая никого, как это делается.

Какие бывают типы управления релизами?

Есть три практических типа: непрерывная выкатка, релизы по расписанию и регулируемое управление изменениями. Они различаются тем, сколько происходит до релиза и сколько автоматизировано. Непрерывная выкатка выпускает каждое влитое изменение, релизы по расписанию собирают изменения в «поезд», а регулируемое управление изменениями добавляет формальное одобрение и журнал для аудита.

Непрерывная выкаткаРелизы по расписаниюРегулируемое управление изменениями (ITIL)
Единица релизаОдин влитый pull requestПакет, раз в неделю или двеЗапрос на изменение
Шаг объёмаНеявный, объём это слияниеВстреча по планированию релизаЗапись об изменении с оценкой риска
ОдобрениеРевью кода и автоматические проверкиРелиз-менеджер подписывает пакетСовет по изменениям или делегированный утверждающий
Контроль рискаФлаги функций, канарейки, быстрый откатВыдержка на стенде, релиз-кандидатЗадокументированный план отката, окно обслуживания
Обычный ритмМного раз в деньОт раза в неделю до раза в месяцЗадаётся календарём изменений
Слабое местоНикто не говорит пользователям, что изменилосьБольшие пакеты прячут изменение, которое всё сломалоВремя на процесс превышает время самого изменения

Большинство команд смешивают подходы. SaaS-продукт может выкатываться непрерывно, мобильное приложение выходить еженедельным «поездом», а единственный платёжный сервис, который интересует аудиторов, идти по формальной записи об изменении. Выбирайте тип для каждого сервиса, а не для всей компании. Там, где изменения открываются постепенно, выпуск и объявление становятся отдельными событиями, и этот случай разобран в статье release notes для функций за флагом.

Какие обязанности у релиз-менеджера?

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

Перед релизом он подтверждает объём и проверяет, что у каждого рискованного изменения есть путь отката. Во время релиза проходит по чек-листу выкатки, следит за метриками продакшена в первые минуты и откатывает без промедления. После релиза убеждается, что заметки вышли, и записывает, что исправить в процессе.

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

Какие ключевые KPI у управления релизами?

Отслеживайте метрики доставки ПО DORA и добавьте одну свою: сколько времени проходит, прежде чем пользователям сообщат. Исследование DORA выделяет пять метрик, разделённых на пропускную способность (время изменения до выкатки, частота выкатки, время восстановления после неудачной выкатки) и нестабильность (доля неудачных изменений, доля доработок после выкатки).

Руководство DORA определяет их простыми словами (dora.dev, software delivery metrics):

KPIЧто измеряетНа что смотреть
Время изменения (change lead time)Время от коммита в системе контроля версий до выкатки в продакшенРост обычно означает очереди на ревью или одобрение
Частота выкаткиКак часто вы выкатываете или сколько проходит между выкаткамиПадение частоты значит, что пакеты растут
Время восстановления после неудачной выкаткиВремя восстановления после выкатки, которая требует немедленного вмешательстваЗдесь видны проблемы с откатом и алертами
Доля неудачных измененийДоля выкаток, которым нужен откат или хотфиксРастёт, когда пакеты слишком велики или тестов мало
Доля доработок после выкаткиДоля незапланированных выкаток, вызванных инцидентом в продакшенеПризнак того, что исправления выходят быстрее, чем усваиваются уроки
Время до уведомления пользователейМинуты от выкатки в продакшен до опубликованной пользовательской заметкиИзмеряйте сами, ни один фреймворк этого не даёт

В более старых материалах говорится о четырёх ключевых метриках, а восстановление называется «time to restore». В нынешнем руководстве используются пять метрик выше.

То же руководство предостерегает от превращения их в цели. Установка вроде «к концу года всё выкатывается несколько раз в день» побуждает команды подгонять цифры, а сами метрики предназначены для чтения по каждому приложению или сервису, а не усреднённо по компании. Его практический совет для улучшения всех метрик: уменьшать размер каждого изменения, потому что мелкие изменения легче проверять, проводить через пайплайн и откатывать.

Как коммуникация о релизе вписывается в процесс управления релизами?

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

Самый дешёвый способ держать этот шаг в графике: писать запись, когда изменение вливается, а не когда релиз выходит. В pull request уже есть заголовок, автор, связанная задача и контекст. Черновик, собранный из него, правят, а не пишут по памяти неделю спустя. На этом строится идея автоматизации changelog: получить черновик при слиянии, удержать его до одобрения человеком и опубликовать везде из одного источника. Changeloop работает именно так: составляет записи из влитых pull request с помощью ИИ и удерживает их до одобрения, прежде чем что-либо публикуется.

Стоит заранее предусмотреть два варианта. Поддержке и продажам нужна другая заметка, чем клиентам, и для этого существуют внутренние release notes. У релиза, вызванного инцидентом, нет времени на обычный цикл черновиков, поэтому держите короткий шаблон наготове, как описано в статье экстренные release notes. Шаблон release notes даёт исходную форму для пользовательской версии.

Как сохранить процесс лёгким?

Автоматизируйте каждый критерий выхода, который может проверить машина, а людям оставьте суждения. Зелёный пайплайн, отметка выкатки на дашбордах и черновик записи в changelog на каждый влитый pull request проверяются машиной. Убедителен ли план отката и понятны ли заметки клиенту, решает человек.

Чтобы проверить процесс, возьмите релиз прошлого месяца и спросите, мог ли человек вне команды по одной только письменной записи понять, что выпущено, кто одобрил, как проверено и когда пользователям сообщили. Любой пробел это ваше следующее улучшение.

FAQ

Чем управление релизами отличается от управления изменениями? Управление релизами собирает, тестирует, выкатывает и объявляет набор изменений. Управление изменениями в смысле ITIL это процесс одобрения и оценки риска вокруг каждого изменения. Команды, которые выпускают часто, вносят одобрение в ревью кода и автоматические проверки.

Как часто нужно выпускать релизы? Так часто, как позволяют ваши тесты и путь отката, а для многих веб-команд это ежедневно и чаще. Совет DORA: уменьшать размер каждого изменения, потому что мелкие изменения легче проверять и откатывать.

Нужен ли небольшим командам релиз-менеджер? Им нужны обязанности, но не обязательно должность. Меняйте роль между инженерами, дайте дежурному письменный чек-лист и убедитесь, что у каждого из семи шагов есть владелец.

Что должен включать чек-лист релиза? Подтверждённый объём, зелёный пайплайн на выпускаемом коммите, названный путь отката, записанное одобрение, smoke-проверки после выкатки, сравнение метрик с исходным уровнем, опубликованные release notes, уведомлённая поддержка и назначенный разбор. Умещайте на одной странице.


Технические утверждения в этой статье не проходили независимую проверку. Если здесь что-то не так, сообщите нам, и мы исправим.

По теме на changeloop: Документация для разработчиков, Шаблон релиз-нот

changeloop
Команда, которая делает changelog, замыкающий цикл. Пользователи о чём-то просят, ваша команда это делает, тот, кто просил, узнаёт об этом.