Пока конвейер зелёный, CI выглядит бесплатным приложением к репозиторию. 5–7 октября GitHub напомнил, что это прод: четыре critical-инцидента за три дня.
Самый разобранный — 5 октября, 18:48–22:49 UTC. За четыре часа инцидента 14.3% workflow-запусков на GitHub-hosted раннерах и 26.5% отдельных заданий не уложились в пятиминутный норматив старта, а в пиковые ~90 минут 47.0% запусков завершались ошибкой и 71.9% заданий не стартовали вовремя. Причина — частичный сетевой сбой между одним из собственных дата-центров GitHub и частью облачных региональных сервисов БД и хранилищ; помогло переключение трафика на здоровые регионы и добавленная мощность. Self-hosted раннеры не пострадали вовсе. Дальше серия продолжилась: critical 6 октября (деградация нескольких сервисов) и ещё два 7-го (Git-операции, Issues, Actions, Pull Requests).
Деталь для архитекторов — спокойно, без злорадства: первопричиной стала связность собственного ДЦ GitHub с облачными сервисами. Классическая гибридная топология отказала у самой платформы, на которой живут CI/CD тысяч команд. Абсолютной изоляции от таких сбоев нет ни у кого — значит, вопрос не «случится ли», а «что мы делаем, когда случится».
Что это значит тимлиду. Первое: посчитайте стоимость часа простоя конвейера — разработчики × ставка × часы ожидания. Это честная нижняя граница: сорванные релизные окна и остывший контекст задач в неё даже не входят. Одна цифра превращает разговор об устойчивости CI из абстракции в строку бюджета. Второе: гибрид hosted/self-hosted раннеров перестал быть только оптимизацией затрат. 5 октября он был водоразделом между 47% ошибок на пике и нулём пострадавших — держать часть мощности у себя теперь аргумент надёжности, а не бухгалтерии. Третье: отсутствие ранбука на случай недоступности GitHub — это техдолг, а не экзотика. Внутри — три скучных пункта: что происходит с очередью мержей, как сдвигаются релизные окна, откуда берутся зеркала артефактов и зависимостей. Такой документ пишут один раз и достают в худший четверг квартала.
SLA платформы — обещание вендора, а не ваш план продолжения работы. План — это то, что лежит у команды до инцидента; после него остаётся только импровизация.
📎 Источники: постмортем 5 октября; инциденты 6–7 октября: cjwszcf57bff, qpfv5p86dmrl, djlmxz2zd0j7