Признак, по которому это узнают: «по пятницам мы не релизим». Разумное правило для небезопасного процесса и странное — навсегда. На самом деле оно говорит: никто не знает, что будет после кнопки.
Что входит в нормальную настройку
- Пайплайн, который собирает, проверяет и выкатывает на каждый пуш — в вашем репозитории, а не у подрядчика.
- Тестовое и боевое окружения, которые действительно разделены. Проверка на бою, потому что больше негде, — корень большинства пятничных происшествий.
- Сборка в контейнере, чтобы то, что проверили, и было тем, что поедет.
- Откат одной командой, проверенный при вас. Непроверенный откат — это план, а не возможность.
- Мониторинг, который доходит до человека, а не в лог, который никто не открывает.
- Бэкапы с одним выполненным восстановлением. Поставка — это восстановление.
Если в предложении нет двух последних пунктов, вам продают половину работы.
Сколько это стоит и занимает
Для одного приложения и одного боевого окружения — две недели и от 100 000 ₽. Дороже становится, когда приложений несколько, окружений больше двух или инфраструктуру сначала нужно распутать: это видно за час разговора и должно быть названо до счёта.
Мы держим эту цену низкой намеренно: это дверь, за которой начинается разговор о поддержке, а не самое дорогое, что мы продаём.
Что НЕ нужно покупать
Kubernetes, если у вас нет масштаба, который его требует. Он решает задачи, которых у большинства продуктов нет, и приносит постоянную сложность, которую кто-то должен обслуживать. Мы его не эксплуатируем и не продаём.
Выкатку без простоя до того, как тридцать секунд паузы начнут стоить денег. Сначала посчитайте, сколько стоит эта пауза ночью.
Круглосуточное дежурство в довесок. Либо это отдельный договор с людьми в ночную смену, либо это обещание, которое не выполнят.
Что происходит без выкатки по кнопке
Пока релиз делается руками, вы платите за это каждый раз, просто не строкой в
бюджете.
Релиз становится событием. Его назначают, к нему готовятся, его боятся
делать в пятницу. Продукт из-за этого выпускается реже, а чем реже выпускают,
тем больше изменений в каждом релизе и тем страшнее следующий. Это замкнутый
круг, и разрывается он именно автоматизацией.
Выкатывает один человек. Тот, у кого есть доступы и в голове порядок шагов.
Пока он в отпуске, продукт не меняется, а когда он уходит из компании, у вас
остаётся система, которую никто не умеет обновлять.
Откат — импровизация. Спрашивать «как откатиться» посреди инцидента поздно:
в этот момент нужен не план, а команда, которую уже кто-то выполнял.
Стенды расходятся с боевым. «У меня локально работает» — это не шутка, а
описание того, что окружения собраны по-разному, и разница вылезает в самый
неудобный момент.
Ни один из этих пунктов не выглядит как счёт. Все вместе они дороже настройки в
первый же квартал.
Что делать, если продукт уже живёт на сервере руками
Частая ситуация: система работает, обновляется по SSH, инструкции нет.
Разумный порядок — не «переделать всё», а три шага.
Первый: описать окружение как код. Даже если пока ничего не автоматизировано,
должен появиться файл, по которому окружение поднимается с нуля. Это же и есть
инструкция, только исполняемая.
Второй: собрать образ. С этого момента у вас есть повторяемая сборка вместо
«скопировали папку», и любую версию можно поднять заново.
Третий: подключить выкатку и откат. И один раз откатиться нарочно, при вас,
до того как это понадобится всерьёз. Мы это [делаем частью
передачи](/ru/services/deployment-and-support): бэкап, который никто не
восстанавливал, — это не бэкап, а надежда.
Как понять, что работа сделана
Один простой признак: изменение выкатывает не «Саша», а любой разработчик пушем в ветку. Второй: вы сами, при подрядчике, откатили релиз и увидели, что сайт вернулся к предыдущей версии.
Третий, самый важный: релиз перестал быть событием, о котором предупреждают заранее.
Этот сайт живёт ровно на такой схеме, и три наших продукта тоже. Если хотите посмотреть, как это устроено, прежде чем заказывать, — спросите, покажем на своём.