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

CI/CD расшифровывается как Continuous Integration и Continuous Delivery (или Continuous Deployment). Это набор практик и инструментов, автоматизирующих сборку, тестирование и выпуск программного обеспечения. Для QA-инженеров понимание CI/CD больше не является опциональным — это ключевая компетенция, которая отличает современных тестировщиков от тех, кто застрял на ручных процессах.

В традиционном рабочем процессе разработчики пишут код неделями, а затем передают его QA для тестирования. Баги, найденные через недели после написания кода, дорого исправлять. CI/CD устраняет эту задержку, автоматизируя цикл сборка-тестирование-деплой, чтобы каждое изменение кода проверялось за минуты.

Continuous Integration (CI)

Continuous Integration — это практика объединения всех рабочих копий разработчиков в общую основную ветку несколько раз в день. Каждое объединение запускает автоматический процесс:

  1. Код загружается из репозитория
  2. Зависимости устанавливаются и приложение компилируется
  3. Запускаются автоматические тесты — unit-тесты, линтинг, статический анализ
  4. Результаты сообщаются команде

Ключевой принцип: если тест падает, сборка считается «сломанной» и её исправление становится главным приоритетом команды. Никто не коммитит новый код поверх сломанной сборки.

Почему CI важен для QA

  • Раннее обнаружение багов: Баги обнаруживаются через минуты после появления, а не через недели
  • Снижение риска интеграции: Маленькие, частые слияния вызывают меньше конфликтов, чем большие и редкие
  • Автоматическая регрессия: Каждый коммит автоматически проверяется существующими тестами
  • Общая ответственность: Разработчики не могут игнорировать падающие тесты, потому что пайплайн блокирует их работу

Continuous Delivery (CD)

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

Процесс развёртывания автоматизирован и воспроизводим. Тот же пайплайн, который разворачивает в staging, может развернуть в продакшен с одним шагом одобрения.

Пайплайн развёртывания

Типичный CD-пайплайн состоит из этапов, которые последовательно повышают уверенность:

Коммит → Сборка → Unit-тесты → Интеграционные тесты → Деплой в Staging → E2E-тесты → Performance-тесты → Security Scan → [Ручное одобрение] → Деплой в продакшен

Каждый этап действует как quality gate. Если любой этап проваливается, пайплайн останавливается и команда получает уведомление. Код, прошедший все gates, считается готовым к продакшену.

Continuous Deployment

Continuous Deployment идёт на шаг дальше CD: каждое изменение, прошедшее автоматический пайплайн, автоматически разворачивается в продакшен. Ручное одобрение не требуется.

Это звучит рискованно, но работает, когда:

  • Набор тестов полный и заслуживает доверия
  • Мониторинг и алерты мгновенно обнаруживают проблемы в продакшене
  • Механизмы отката быстры и надёжны
  • Feature flags контролируют доступность новой функциональности

Компании вроде Netflix, Amazon и Google делают тысячи деплоев в день, используя continuous deployment.

Этапы пайплайна и роль QA

Этап 1: Сборка и статический анализ

CI-сервер компилирует код и запускает инструменты статического анализа (линтеры, проверку типов, проверку стиля кода).

Участие QA: Убедиться, что правила статического анализа включают проверки, связанные с качеством. Проверить, какие правила включены и обнаруживают ли они типичные баги в вашей кодовой базе.

Бюджет времени: 1-5 минут.

Этап 2: Unit-тесты

Быстрые изолированные тесты проверяют отдельные функции и классы.

Участие QA: Проверять отчёты о покрытии unit-тестами. Выявлять непротестированные пути кода и координировать с разработчиками для заполнения пробелов.

Бюджет времени: 2-10 минут.

Этап 3: Интеграционные тесты

Тесты проверяют совместную работу компонентов — API-контракты, операции с базой данных, межсервисное взаимодействие.

Участие QA: Писать и поддерживать интеграционные тесты, особенно тесты на уровне API. Определять, какие интеграции критично тестировать.

Бюджет времени: 5-15 минут.

Этап 4: Деплой в Staging

Приложение разворачивается в предпродакшен-окружении, максимально близком к продакшену.

Участие QA: Проверить здоровье деплоя. Убедиться в корректности конфигураций, миграций и переменных окружения.

Бюджет времени: 2-5 минут.

Этап 5: End-to-End тесты

Автоматические тесты имитируют реальные пользовательские сценарии через полный стек приложения.

Участие QA: Владеть E2E-набором тестов. Решать, какие критические пользовательские сценарии должны пройти перед любым релизом.

Бюджет времени: 10-30 минут.

Этап 6: Performance и безопасность

Нагрузочные тесты, стресс-тесты и сканирования безопасности проверяют соответствие приложения нефункциональным требованиям.

Участие QA: Определять базовые показатели производительности и правила сканирования безопасности. Анализировать результаты и решать, являются ли проблемы блокерами.

Бюджет времени: 10-20 минут.

Распространённые инструменты CI/CD

ИнструментТипЛучше всего для
JenkinsCI/CD self-hostedМаксимальная гибкость и экосистема плагинов
GitHub ActionsCI/CD в облакеПроекты на GitHub
GitLab CICI/CD облако/self-hostedПроекты на GitLab
CircleCICI/CD в облакеБыстрые сборки, Docker-first процессы
Azure DevOpsCI/CD в облакеИнтеграция с экосистемой Microsoft
TeamCityCI/CD self-hostedЭкосистема JetBrains, .NET-проекты

У каждого инструмента свои сильные стороны. В следующих трёх уроках мы подробно рассмотрим Jenkins, GitHub Actions и GitLab CI — три наиболее используемые CI/CD-платформы.

Анти-паттерны CI/CD

Пайплайн «У меня на машине работает»

Когда CI-окружение отличается от окружений разработки и продакшена, тесты проходят локально, но падают в CI (или наоборот). Решение: используйте контейнеры (Docker) для обеспечения идентичных окружений повсюду.

Медленный пайплайн

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

Игнорируемый пайплайн

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

Узкое место ручной проверки

Если один QA-инженер должен вручную одобрять каждый деплой, он становится узким местом, замедляющим всю команду. Решение: автоматизируйте quality gates с чёткими критериями успеха/неудачи. Оставьте ручное тестирование для исследовательских сессий, а не для одобрения gates.

Упражнение: Соотнесите свой текущий процесс с CI/CD

Подумайте о проекте, над которым вы работаете (или о гипотетическом, если вы только начинаете). Ответьте на эти вопросы:

  1. Как часто ваша команда интегрирует код? (Раз в день? Раз в спринт? В конце фичи?)
  2. Что происходит, когда тесты падают? (Сборка блокируется? Разработчики всё равно могут мержить?)
  3. Сколько времени проходит от коммита до деплоя в продакшен?
  4. Какой процент вашего тестирования автоматизирован vs. ручной?

Теперь соотнесите свой текущий процесс с уровнями зрелости CI/CD:

УровеньПрактикаВаша команда?
0 - Без CIРучные сборки, нет автоматических тестов
1 - Базовый CIАвтоматические сборки при коммите, некоторые unit-тесты
2 - Полный CIПолные автоматические тесты, сборки всегда проходят
3 - CD (Delivery)Автоматический деплой в staging, ручное одобрение для продакшена
4 - CD (Deployment)Полностью автоматический пайплайн до продакшена
Руководство по оценке

Уровень 0-1: Сосредоточьтесь на создании автоматических сборок и написании unit-тестов. Это фундамент.

Уровень 2: Ваш CI надёжен. Следующий шаг: автоматизируйте деплой в staging-окружение и добавьте интеграционные/E2E-тесты.

Уровень 3: Вы практикуете Continuous Delivery. Чтобы достичь Уровня 4, нужны: полное покрытие тестами, мониторинг, feature flags и возможность быстрого отката.

Уровень 4: Вы на высшем уровне. Фокусируйтесь на оптимизации: сокращайте время пайплайна, улучшайте надёжность тестов и добавляйте практики chaos engineering.

Основы конфигурации пайплайна

Каждый CI/CD-инструмент использует конфигурационный файл, определяющий пайплайн. Хотя синтаксис различается, базовые концепции универсальны:

Триггеры

Когда должен запускаться пайплайн?

# Пример: Запуск при каждом push в main и на pull requests
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

Этапы (или Jobs)

Какие последовательные шаги должны выполняться?

stages:
  - build
  - test
  - deploy

Steps

Какие команды выполняются внутри каждого этапа?

steps:
  - name: Установить зависимости
    run: npm ci
  - name: Запустить unit-тесты
    run: npm test
  - name: Запустить E2E-тесты
    run: npx playwright test

Артефакты

Какие файлы должны сохраняться между этапами?

Отчёты о тестах, скриншоты упавших E2E-тестов, отчёты о покрытии и результаты сборки — типичные артефакты. Они помогают отлаживать сбои после завершения пайплайна.

Переменные окружения и секреты

Конфигурационные значения и учётные данные, необходимые пайплайну:

env:
  NODE_ENV: test
  DATABASE_URL: ${{ secrets.TEST_DB_URL }}

Никогда не записывайте секреты непосредственно в конфигурационные файлы пайплайна. Используйте функцию управления секретами вашего CI/CD-инструмента.

Чеклист QA для готовности к CI/CD

Используйте этот чеклист для оценки готовности CI/CD-пайплайна вашей команды:

  • Каждый коммит запускает автоматическую сборку
  • Unit-тесты запускаются при каждой сборке с покрытием не менее 80%
  • Интеграционные тесты проверяют критические API-контракты
  • E2E-тесты покрывают топ-5-10 пользовательских сценариев
  • Результаты тестов видны в pull/merge requests
  • Упавшие тесты блокируют мерж
  • Пайплайн выполняется менее чем за 30 минут (быстрый путь) или 1 час (полный путь)
  • Тестовые окружения создаются автоматически
  • Процесс отката задокументирован и проверен
  • Алерты мониторинга срабатывают при проблемах в продакшене после деплоя

Ключевые выводы

  1. CI/CD — это не только забота DevOps — QA-инженеры должны понимать и влиять на каждый этап пайплайна
  2. Автоматизация — фундамент — ручные процессы не масштабируются в CI/CD-окружениях
  3. Скорость имеет значение — быстрые циклы обратной связи позволяют разработчикам исправлять проблемы, пока контекст свеж
  4. Quality gates должны быть автоматическими — пайплайн должен быть gatekeepr-ом, а не человек, вручную одобряющий каждое изменение
  5. Начинайте с того, что есть — даже базовый CI (автоматические сборки + unit-тесты) — это огромное улучшение по сравнению с ручными процессами