Prog Academy
RU UA
DevOps и облака

Что такое CI/CD?

CI/CD — автоматический конвейер, через который проходит каждое изменение кода: сборка, запуск тестов и доставка готовой версии на серверы. Разработчик отправляет код в репозиторий, а всё остальное происходит без ручных действий.

Смысл в том, чтобы находить проблемы рано и выпускать изменения без стресса. Ошибка, обнаруженная конвейером через пять минут после коммита, стоит несравнимо дешевле, чем та же ошибка, найденная пользователем через неделю.

Типичный пайплайн: получить код → собрать → прогнать тесты → проверить качество и безопасность → собрать контейнер → развернуть на тестовом окружении → после проверки выкатить в продакшен. Настраивают всё это в GitHub Actions, GitLab CI, Jenkins и подобных системах.

Где применяется

Конвейер собирают вокруг репозитория: при каждом изменении запускаются линтеры, тесты и сборка, а при слиянии в основную ветку новая версия уезжает на стенд или в продакшен. Инструменты — GitHub Actions, GitLab CI, Jenkins, Azure DevOps; выбор обычно определяется тем, где лежит код.

Это не только забота DevOps-инженера. QA-автоматизатор встраивает в конвейер свои проверки, разработчик получает результат тестов прямо в запросе на слияние, а тимлид настраивает правило: без зелёной сборки изменения не попадают в основную ветку. Отсюда и требование знать CI/CD почти в любой технической вакансии.

Пример

Разработчик отправляет правку в репозиторий и уходит на обед. За это время конвейер собирает проект, прогоняет четыреста тестов, строит образ контейнера и разворачивает его на тестовом стенде — к возвращению в чате уже висит ссылка на готовую версию.

name: build

on:
  push:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
      - run: npm ci
      - run: npm test
Конвейер GitHub Actions: при каждом пуше проект собирается и прогоняет тесты.

CI и CD — разные вещи

CI (Continuous Integration) — непрерывная интеграция: код всех разработчиков регулярно вливается в общую ветку, и каждая такая порция автоматически собирается и тестируется. CD — это либо continuous delivery (версия всегда готова к выпуску, но кнопку нажимает человек), либо continuous deployment (выкатка происходит автоматически). CI отвечает за качество кода, CD — за его доставку.

Частые вопросы

Чем CI отличается от CD?

CI — непрерывная интеграция: каждое изменение автоматически собирается и проверяется тестами. CD — доставка или развёртывание готовой версии дальше: на тестовый стенд или в продакшен. CI отвечает на вопрос «код рабочий?», CD — «версия доехала до пользователей?».

Нужен ли CI/CD маленькой команде?

Да, и окупается он быстро. Даже конвейер из двух шагов — прогнать тесты и собрать проект — экономит время и снимает целый класс проблем вида «у меня локально работало». Настройка простого пайплайна занимает несколько часов.

Какой инструмент CI/CD выбрать?

Проще всего взять тот, что встроен в ваш хостинг кода: GitHub Actions для GitHub, GitLab CI для GitLab. Jenkins выбирают компании со сложными процессами и требованием держать всё на своих серверах. Принципы везде одинаковые, отличается синтаксис.

Что делать, если сборка падает часто?

Сначала разбирают причину: нестабильные тесты, зависимость от внешних сервисов, разное окружение. Падающий конвейер, который все привыкли игнорировать, вреднее его отсутствия — команда перестаёт доверять результату и начинает выкатывать изменения мимо процесса.

Связанные термины