Разработчик пишет в чат: «Фикс готов, выкачу вечером». Вечером сайт падает, а откатить изменения не получается, потому что выкладку делали руками и по памяти. Утром выясняется, что вместе с исправлением на сервер уехал недописанный кусок другой задачи. CI/CD нужен ровно для того, чтобы такие вечера перестали случаться.
Это не модное слово из вакансий, а способ организовать путь кода от программиста до пользователей. Разбираться в конфигурационных файлах владельцу бизнеса не нужно. Нужно понимать, что это даёт, во что обходится его отсутствие и какие вопросы задать команде.
Аббревиатура состоит из двух частей.
CI, непрерывная интеграция. Разработчики часто вливают свои изменения в общий код, а каждое вливание автоматически собирается и проверяется тестами. Фаулер (Martin Fowler), автор классической статьи о непрерывной интеграции, задаёт ориентир: каждый участник команды объединяет свои изменения с чужими хотя бы раз в день. Ошибка находится вскоре после появления, пока автор ещё помнит, что менял.
CD, непрерывная доставка или непрерывное развёртывание. Здесь есть тонкость. Непрерывная доставка (continuous delivery) означает, что код в любой момент готов к выпуску, а в продакшен его выкладывают по кнопке, когда решит команда. Непрерывное развёртывание (continuous deployment) идёт дальше: каждое изменение, прошедшее проверки, уходит к пользователям автоматически. Второе невозможно без первого. Термины путают даже в самих командах, поэтому на старте проекта договоритесь, что именно вы строите: автоматическую проверку, выкладку по кнопке или полностью автоматический релиз.
Вместе это и есть конвейер, или пайплайн: цепочка автоматических шагов, через которую проходит каждое изменение кода. Проще всего представить конвейер на производстве. Деталь не попадает на сборку, пока не прошла контроль на предыдущем участке. CI/CD переносит тот же принцип в разработку: изменение не попадает к пользователям, пока не прошло все проверки.
Все шаги описываются в конфигурационном файле, который лежит рядом с кодом. Запускает их раннер: отдельный сервер или виртуальная машина. Если любой шаг падает, конвейер останавливается, и сломанный код дальше не проходит. Как устроить такой конвейер и что в нём автоматизировать в первую очередь, подробно разобрано в статье про автоматизацию процессов разработки.
Скорость здесь важна. Фаулер ссылается на правило из экстремального программирования: сборка примерно за десять минут считается разумной для большинства проектов. Если конвейер идёт час, разработчики начинают его обходить, и смысл пропадает.
На небольшом проекте конвейер может состоять из трёх шагов: сборка, тесты, выкладка. Это уже надёжнее ручной выкладки. Дальше его наращивают вместе с продуктом и командой.
Без конвейера каждый релиз превращается в маленький проект: договориться, кто выкладывает, проверить руками, держать всех на связи на случай поломки. Поэтому релизы делают реже, изменения копятся, и каждый следующий выпуск становится рискованнее предыдущего.
Результат можно измерить. Исследовательская программа DORA много лет изучает команды разработки и оценивает поставку ПО по двум группам метрик. Пропускная способность: как часто вы выкатываете изменения, сколько времени проходит от коммита до продакшена и как быстро команда восстанавливается после неудачного релиза. Стабильность: какая доля релизов требует срочного вмешательства и сколько выкладок приходится делать внепланово из-за инцидентов. Попросите подрядчика показывать эти цифры раз в месяц.
| Инструмент | Где описан конвейер | Особенности |
|---|---|---|
| GitHub Actions | YAML-файлы в папке .github/workflows репозитория | Встроен в GitHub, раннеры от GitHub или собственные |
| GitLab CI/CD | Файл .gitlab-ci.yml в корне проекта | Этапы и задачи в одном файле, сам GitLab можно развернуть на своём сервере |
| Jenkins | Jenkinsfile в репозитории или настройки сервера | Сервер автоматизации с открытым кодом и большим набором плагинов |
Инструмент вторичен. Конвейер без тестов на любой платформе зелёный и бесполезный: он честно подтверждает, что код собрался, и ничего не говорит о том, работает ли продукт.
Раннеры можно взять у платформы или поднять свои. Свои нужны, когда сборке требуется доступ к внутренним системам компании или особое окружение. Раннеры платформы проще: их не нужно обслуживать и обновлять.
Большинство этих проблем видно без погружения в код. Спросите, когда последний раз откатывали релиз и почему. Если команде нечего ответить, она либо редко выкатывает изменения, либо не замечает поломок.
Эти вопросы не требуют технической подготовки, а ответы многое говорят о зрелости команды.
Хороший ответ звучит конкретно: «конвейер идёт двенадцать минут, откат одной кнопкой, пароли в хранилище секретов». Размытые формулировки вроде «у нас всё налажено» стоит уточнять.
Особенно важен первый пункт. Репозиторий, конвейер и доступы к серверам должны быть оформлены на вашу компанию. Тогда смена подрядчика станет рабочим вопросом, а не катастрофой.
Нейросети встраиваются в конвейер как ещё один шаг проверки. Модель делает первичное ревью изменений, предлагает тесты к новому коду, разбирает логи упавших сборок и группирует похожие ошибки. Как ИИ помогает с анализом результатов автотестов, есть отдельный разбор, а рабочие приёмы собраны в материале про нейросеть для работы с кодом.
Больше всего пользы ИИ приносит там, где много однотипной рутины: описания изменений для релиза, первичный разбор упавших тестов, поиск похожих ошибок в истории. Правило то же, что с людьми: модель помогает, но не принимает решение о релизе. Последнее слово за тестами и за ответственным разработчиком.
Если не хочется выстраивать это самому, команда заказной разработки Neurounit собирает проекты сразу с конвейером: от репозитория на вашем аккаунте до автоматической выкладки и мониторинга.