Что такое CI/CD? Непрерывная интеграция и доставка простыми словами
CI/CD — это способ выпуска программного обеспечения, при котором каждое изменение кода автоматически собирается, тестируется и — если проходит проверку — готовится к выпуску или выпускается. CI (непрерывная интеграция) означает, что изменения часто объединяются и каждый раз проверяются автоматическими тестами. CD (непрерывная доставка или развёртывание) означает, что прошедшие проверку изменения упаковываются и передаются пользователям с небольшим участием человека или без него.
Смысл прост: ловить ошибки через минуты после их появления, а не через недели, когда их найдёт клиент.
Почему CI/CD важен, когда вы создаёте приложение с ИИ
ИИ-конструкторы вносят изменения в код быстро. Один промпт может затронуть десять файлов. Эта скорость отлична, пока изменение страницы оплаты незаметно не сломает страницу входа, и никто этого не заметит, пока пользователь не напишет вам письмо.
CI/CD — это страховка именно для такого случая. Вместо того чтобы надеяться, что каждое изменение в порядке, конвейер запускает одни и те же проверки каждый раз:
- Собирается ли приложение без ошибок?
- Проходят ли автоматические тесты?
- Соответствует ли код правилам проекта (типы, форматирование, проверки безопасности)?
Если какая-либо проверка не проходит, изменение останавливается до того, как попадёт к пользователям. Чем быстрее меняется ваш код, тем ценнее проверка, которая не устаёт и не пропускает шаги.
Бытовая аналогия
Представьте пекарню, которая каждое утро продаёт хлеб магазинам.
- Без CI/CD каждый пекарь неделю экспериментирует с рецептом по-своему, а в пятницу вечером все смешивают свои изменения и надеются, что хлеб поднимется. Когда не поднимается, никто не знает, чья правка виновата.
- С CI каждое небольшое изменение рецепта сразу выпекается как пробная буханка и проверяется: вкус, вес, форма. Плохое изменение ловится в тот же день, и вы точно знаете, какое оно было.
- С CD буханки, прошедшие проверку, сразу уходят в фургон доставки, упакованные и подписанные каждый раз одинаково, а не упаковываются вручную в пять утра.
Проверка не делает пекарей лучше. Она делает их ошибки дешёвыми.
Как работает конвейер CI/CD
Конвейер (pipeline) — это список шагов, которые сервис CI/CD автоматически выполняет, когда что-то происходит, обычно когда код отправляется в репозиторий вроде GitHub. Типичный конвейер выглядит так:
| Шаг | Что происходит | Что ловит |
|---|---|---|
| 1. Запуск | Код отправлен или открыт pull request | — |
| 2. Установка | Чистая машина скачивает код и его зависимости | Отсутствующие или сломанные пакеты |
| 3. Сборка | Приложение компилируется или упаковывается | Синтаксические и типовые ошибки, сломанные импорты |
| 4. Тесты | Запускаются автоматические тесты | Функции, которые перестали работать |
| 5. Проверки | Линтинг, форматирование, сканирование безопасности | Проблемы стиля, известные уязвимые пакеты, утёкшие ключи |
| 6. Развёртывание на стейджинг | Приложение уходит на тестовую копию продакшена | Проблемы, которые проявляются только в реальном окружении |
| 7. Развёртывание в продакшен | Приложение выходит в эксплуатацию — автоматически или после одобрения | — |
Каждый шаг выполняется на чистой машине, а не на чьём-то ноутбуке, поэтому «у меня на компьютере работает» перестаёт быть оправданием. Если шаг падает, конвейер останавливается и сообщает тому, кто внёс изменение.
Шаги описаны в файле конфигурации, который лежит рядом с кодом. В GitHub Actions, например, это YAML-файл в папке .github/workflows репозитория.
Непрерывная доставка и непрерывное развёртывание
«CD» неоднозначно, и люди используют его в обоих значениях:
| Непрерывная доставка | Непрерывное развёртывание | |
|---|---|---|
| Тесты запускаются автоматически | Да | Да |
| Релиз упаковывается автоматически | Да | Да |
| Выходит в продакшен автоматически | Нет — человек нажимает «выпустить» | Да — каждое прошедшее изменение выходит сразу |
| Подходит для | Большинства небольших команд, приложений с платящими пользователями | Команд с хорошим покрытием тестами и мониторингом |
Непрерывное развёртывание работает хорошо только при качественных тестах. Если тесты не покрывают оплату, непрерывное развёртывание с удовольствием выпустит сломанную оплату.
Пример: приложение записи с конвейером
Допустим, у вас есть приложение записи в салон, и его код лежит в репозитории GitHub. Вы просите ИИ-конструктор: «Добавь скидку 10% для новых клиентов».
- Изменение отправляется в новую ветку, и открывается pull request.
- Запускается конвейер. Он устанавливает пакеты и собирает приложение — этап проходит.
- Он запускает тесты. Один тест, «постоянный клиент платит полную цену», падает: скидка применяется ко всем.
- В pull request появляется красный крестик. Изменение нельзя слить.
- Вы просите ИИ исправить. Он отправляет исправление; конвейер запускается снова, и всё проходит.
- Изменение сливается. Конвейер развёртывает его на стейджинг-окружении, где вы делаете тестовую запись.
- Вы одобряете, и оно развёртывается в продакшен.
Без конвейера шаг 3 произошёл бы с кошельками ваших клиентов.
Ключевые термины
| Термин | Значение |
|---|---|
| Конвейер (pipeline) | Автоматическая последовательность шагов, которая выполняется для каждого изменения. |
| Сборка (build) | Превращение исходного кода в то, что может работать. |
| Автоматический тест | Код, который проверяет, что другой код делает то, что должен. |
| Pull request (PR) | Предлагаемое изменение, которое проверяют другие (и конвейер) до слияния. См. что такое GitHub. |
| Ветка (branch) | Отдельная линия изменений, чтобы незавершённая работа не влияла на основной код. |
| Стейджинг (staging) | Закрытая копия вашего приложения, повторяющая продакшен, для проверки изменений до того, как их увидят пользователи. |
| Продакшен (production) | Живое приложение, которым пользуются ваши клиенты. |
| Откат (rollback) | Возврат к предыдущей рабочей версии, когда выпуск пошёл не так. |
| Зелёная / красная сборка | Запуск конвейера, который прошёл / провалился. |
Распространённые заблуждения
- «CI/CD означает, что мое приложение протестировано». Конвейер запускает только те тесты, которые у вас есть. Если тестов нет, CI доказывает лишь то, что приложение собирается, — и ничего больше. Попросите ИИ написать тесты для самых важных сценариев.
- «CI/CD нужен только крупным компаниям». Такие инструменты, как GitHub Actions, настраиваются коротким файлом конфигурации, и небольшие команды используют их постоянно. Усилия уходят на тесты, а не на инструменты.
- «Автоматическое развёртывание означает, что никто ничего не проверяет». Хорошие конвейеры добавляют проверки, а не убирают их. Многие команды оставляют шаг ручного одобрения перед продакшеном.
- «Если конвейер зелёный, приложение работает». Это значит, что автоматические проверки прошли. Изменение всё равно стоит попробовать самому — желательно в превью или на стейджинге.
- «CI/CD заменяет резервные копии». Нет. Плохая миграция базы, которая проходит тесты, всё равно может испортить реальные данные. Храните резервные копии и способ откатиться.
Что спросить у вашего ИИ-конструктора
- «Напиши автоматические тесты для регистрации, входа и оплаты и покажи, как их запустить».
- «Настрой workflow GitHub Actions, который устанавливает зависимости, собирает приложение и запускает тесты на каждом pull request».
- «Добавь в конвейер проверку типов и линтер и сделай так, чтобы он падал при ошибках».
- «Объясни простыми словами, что делает каждый шаг конвейера».
- «Что произойдёт, если развёртывание сломается на полпути? Как откатиться?»
- «Проверь, что секреты не записаны жёстко в репозитории и не выводятся в логи конвейера».
Если ваше приложение использует API-ключи, они нужны и конвейеру — их храните как зашифрованные секреты в инструменте CI, но никогда в файле конфигурации. См. переменные окружения и секреты.
CI/CD и Mythex
Mythex не запускает за вас конвейер CI, но закрывает несколько похожих задач по-своему:
- Контрольные точки. После каждого успешного хода агента Mythex сохраняет git-чекпоинт, и Вернуться к этой точке откатывает проект, если изменение пошло не так. См. Чат.
- App Testing. Введите
/test, и агент пройдёт по вашему живому превью, как пользователь, и сообщит о сломанных сценариях — полезно перед каждой публикацией. См. App Testing. - Публикация — осознанный шаг. Изменения сначала появляются в закрытом превью; публичное приложение обновляется только когда вы публикуете снова — это ближе к непрерывной доставке, чем к непрерывному развёртыванию.
- Синхронизация с GitHub (Pro). Синхронизируйте проект с репозиторием GitHub, и вы сможете добавить свои workflow GitHub Actions, которые запускают тесты при каждой отправке. См. GitHub и экспорт.
Список того, что проверить вручную перед запуском, см. в статье как протестировать приложение перед запуском, а по работе с системой контроля версий — как использовать Git с приложением, созданным с ИИ.
Вопросы
Что означает CI/CD?
CI — это непрерывная интеграция: каждое изменение кода часто вливается в общую базу и автоматически собирается и тестируется. CD — это непрерывная доставка или непрерывное развёртывание: изменения, прошедшие тесты, автоматически готовятся к выпуску (доставка) или выпускаются пользователям без ручного шага (развёртывание).
В чём разница между непрерывной доставкой и непрерывным развёртыванием?
При непрерывной доставке каждое изменение, прошедшее конвейер, готово к выпуску, но решение о том, когда отправить его в продакшен, принимает человек. При непрерывном развёртывании каждое успешное изменение автоматически попадает в продакшен без этапа одобрения человеком.
Нужен ли CI/CD для небольшого приложения, созданного с ИИ?
Не в первый день. Небольшое приложение с горсткой пользователей может обойтись тестированием в превью и публикацией вручную. CI/CD окупается, когда над кодом работают несколько человек, когда от приложения зависят реальные клиенты или когда вы постоянно ломаете то, что раньше работало.
Какие инструменты используются для CI/CD?
Распространённые варианты: GitHub Actions, GitLab CI/CD, CircleCI и Jenkins, а также встроенные конвейеры развёртывания хостинговых платформ. Все они выполняют одну базовую задачу: автоматически запускают список шагов при каждом изменении кода.