Стоимость слияния растёт нелинейно. Два дня расхождения сводятся за полчаса, две недели — за неделю, и половина этой недели уходит на разбор конфликтов, смысл которых уже никто не помнит. CI держит расхождение маленьким принудительно.
Из чего состоит
- Единый репозиторий, где лежит всё нужное для сборки.
- Сборка запускается одной командой и не требует ручных шагов.
- Каждое вливание в основную ветку запускает сборку и автотесты.
- Результат сборки виден всей команде.
- Сломанная сборка чинится раньше любой другой работы.
Последний пункт отличает работающий CI от установленного сервера сборки. Красная сборка, которую все привыкли игнорировать, обходится дороже её отсутствия: она приучает не смотреть на сигнал.
Границы термина
CI отвечает за то, что изменения собираются и проходят проверки. За подготовку версии к выкату отвечает непрерывная поставка, за автоматический выкат в промышленную среду — непрерывное развёртывание. Три практики часто называют одной аббревиатурой, хотя внедряют их по очереди.
- Над кодом работает больше одного человека
- Слияния регулярно превращаются в отдельный проект
- Есть автотесты или их можно написать хотя бы на ключевые сценарии
- Разработчик один и ветка одна: пользы от практики почти нет
- Сборка идёт часами и вердикт приходит на следующий день — сначала чинят время сборки
Команда переходит с двухнедельных веток на ежедневные вливания. Сборка на каждый коммит занимает восемь минут, набор тестов — ещё двенадцать. В первый месяц сборка краснеет почти каждый день, и это выглядит ухудшением. На деле те же ошибки раньше находились на приёмке, только через две недели и без понимания, чьё изменение их принесло.
Первым делом измерьте время от коммита до вердикта. Пока оно больше десяти минут, разработчики перестают ждать результат и уходят к следующей задаче, и смысл быстрой обратной связи теряется. Разбор красных сборок удобно вести обычными задачами в Shtab: у поломки появляется ответственный и срок, и она перестаёт висеть «на команде».