dev-tools
Словарь ↗Непрерывная интеграция / непрерывное развёртывание (CI/CD)
CI/CD расшифровывается как Continuous Integration (непрерывная интеграция) и Continuous Deployment (непрерывное развёртывание) (иногда Continuous Delivery — непрерывная поставка, чуть более консервативный вариант). Непрерывная интеграция означает, что каждое изменение кода, отправленное в общий репозиторий, автоматически запускает конвейер, который собирает проект и прогоняет его автоматические тесты, так что проблемы интеграции обнаруживаются за минуты, а не спустя дни, когда изменения нескольких людей сталкиваются. Непрерывное развёртывание расширяет это так, что изменение, прошедшее все проверки, автоматически выпускается в продакшн без ручного шага; непрерывная поставка — та же идея, но с ручным шлюзом «нажать для релиза» в конце. Почему это важно для создателей AI/SaaS-продуктов: CI/CD — это основа, делающая возможной быструю и безопасную итерацию — без неё команды либо релизят редко (накапливая риск в крупных, пугающих релизах), либо релизят небрежно (регулярно ломая продакшн). Для SaaS-продукта с платящими клиентами надёжный конвейер — это то, что позволяет развёртывать несколько раз в день с уверенностью, а не бояться пятничных релизов. Это также тот уровень, на котором сгенерированный AI код получает свою страховочную сетку: AI-агент может предложить изменение, но именно CI объективно доказывает, что изменение ничего не сломало, прежде чем оно достигнет пользователей. Как это работает: конвейер CI/CD определяется как конфигурация (например, YAML-файл в GitHub Actions, GitLab CI или CircleCI), описывающая этапы — установка зависимостей, линтинг, запуск юнит-тестов, запуск интеграционных тестов, сборка образа контейнера, развёртывание в staging, запуск smoke-тестов, развёртывание в продакшн. Каждый этап должен пройти успешно, чтобы конвейер перешёл к следующему; сбой блокирует слияние или развёртывание и уведомляет команду. Современные конвейеры также ставят условием одобрение код-ревью и автоматические проверки, такие как пороги покрытия тестами или сканирование безопасности. Практический пример: разработчик открывает pull request, добавляющий новый эндпоинт `/api/invoices/export`. Отправка ветки запускает workflow GitHub Actions: этап 1 устанавливает npm-зависимости и запускает ESLint (проходит за 20 с); этап 2 запускает набор юнит-тестов Jest, включающий новый тест, проверяющий правильные заголовки CSV-экспорта (проходит); этап 3 собирает Docker-образ и запускает его против тестового контейнера Postgres для интеграционного теста, который реально обращается к новому эндпоинту (проходит); этап 4 публикует зелёную галочку в PR. Коллега одобряет ревью, PR сливается в `main`, что запускает второй workflow, собирающий production-образ, отправляющий его в реестр контейнеров и разворачивающий его в кластере Kubernetes через скользящее обновление — всё это без того, чтобы кто-либо заходил на сервер по SSH.
Похожие термины