Как я перестал воевать с CI/CD и начал жить
Полтора года назад наш CI был классическим «чемоданом без ручки»: сборка тянулась 47 минут, тесты падали от случайного таймаута, а деплой вручную подтверждал человек с железными нервами (обычно я в 23:40).
Перелом наступил, когда из-за мёрджа в пятницу мы потеряли вечер всей команды. Тогда я сел и написал список всего, что бесит в пайплайне. Список получился на 34 пункта — это был диагноз.
Что мы сделали
Первым делом разрезали монолитный пайплайн на независимые стадии с явными артефактами между ними. Кэш зависимостей вынесли в отдельный слой, а тесты распараллелили по шардам.
pipeline:
stages: [lint, build, test, deploy]
cache:
key: deps-{{ lockfile.hash }}
paths: [.cache/]
test:
parallel: 8
flaky_retry: 1
Вторым шагом была борьба с flaky-тестами: каждый нестабильный тест получил тикет и карантин. Через два месяца карантин опустел, а доверие к зелёной сборке вернулось.
Правило команды: падение CI — это инцидент. Не «перезапущу-ка ещё разок», а разбор: почему и как этого избежать.
Итог: 47 минут превратились в 8, деплои стали скучными (это комплимент), а пятница снова стала пятницей. Если у вас похожие боли — начните со списка из 34 пунктов, честно.
Комментарии 2
Список из 34 пунктов — гениально простой инструмент. Завтра же сделаю такой у нас, у меня как раз пайплайн на 40 минут 😅
Карантин для flaky-тестов работает, подтверждаю. Главное — не забыть про регламент вычистки, иначе карантин станет вторым мейном.