CI/CD5 мин чтения2026-03-06

Уровни автоматизации программирования: от ручного деплоя до полноценного CI/CD

В 2014 году я работал в команде из пяти человек. Деплой делали так: собирали jar-файл локально, заливали на сервер по FTP, перезапускали Tomcat руками. Один раз

В 2014 году я работал в команде из пяти человек. Деплой делали так: собирали jar-файл локально, заливали на сервер по FTP, перезапускали Tomcat руками. Один раз я залил не ту версию — откатывали полчаса, пользователи видели 500-ю ошибку. Было весело.

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

Что вообще считается уровнями автоматизации

Если коротко — это stages того, насколько ваш процесс разработки избавлен от ручного труда. От "собираем и деплоим руками" до "запушил код — всё поехало само".

Обычно выделяют от трёх до шести уровней. Я буду говорить о пяти — так проще структурировать.

Уровень 0. Ручной процесс

Никакой автоматизации. Разработчик собирает проект локально, тестирует вручную, деплоит руками. Это работает в одном случае: когда вы единственный разработчик на pet-проекте. Или когда проект вот-вот умрёт.

Уровень 1. Автоматизированная сборка

Есть скрипт, который собирает проект. Make, Gradle, npm build — не важно. Разработчик всё ещё деплоит руками, но хотя бы сборка консистентная.

Уровень 2. Автоматизированные тесты

К сборке добавляются тесты. Unit-тесты запускаются локально или на CI-сервере. Баги ловятся раньше. Хорошо, но мало.

Уровень 3. Непрерывная интеграция (CI)

Каждый коммит триггерит пайплайн. Сборка, тесты, статический анализ. Если что-то упало — команда узнаёт сразу. Merge в main невозможен без зелёного пайплайна.

Уровень 4. Непрерывное развёртывание (CD)

Код автоматически деплоится на staging, а иногда и в production. Кнопка "Deploy" исчезает. Остается только merge.

По моему опыту, большинство команд застревает между уровнем 2 и 3. Тесты есть, CI настроен, но merge без проверки всё ещё возможен, а деплой — это отдельный процесс с утверждениями и ритуалами.

В чём отличия уровней автоматизации программирования

Главное отличие — в стоимости ошибки и времени её обнаружения.

На уровне 0 баг попадает к пользователю, пользователь жалуется, разработчик чешет голову. Время обнаружения: дни или недели. Стоимость: высокая.

На уровне 3 баг ловится в пайплайне. Время обнаружения: минуты. Стоимость: почти нулевая.

Но есть нюанс. Автоматизация стоит денег. Не прямых — это всё open-source. Стоит времени на настройку и поддержку.

Я видел команды, которые внедрили полный CI/CD за неделю. И видел команды, которые мучаются с ним годами. Разница в подходе: первые автоматизируют то, что болит. Вторые пытаются сделать "как надо" по учебнику.

Ещё отличие — в требованиях к инфраструктуре. Уровень 2 требует только CI-сервер. Уровень 4 требует контейнеризации, оркестрации, окружений, мониторинга. Это уже DevOps-территория.

Как встроить проверку кода в процесс

Самое частое, что я слышу: "У нас есть CI, но код всё равно плохой". Проблема в том, что CI настроен неправильно.

По-хорошему, пайплайн должен проверять:

  1. Сборку — код вообще компилируется
  2. Тесты — базовая логика работает
  3. Стиль — код соответствует конвенциям
  4. Безопасность — нет очевидных уязвимостей
  5. Качество — нет code smells, дублирования, сложных мест

Первые два пункта есть у всех. Последние три — нет. И зря.

Вот пример простого, но рабочего пайплайна для GitLab:

stages:
  - build
  - test
  - quality
  - deploy

build:
  stage: build
  image: python:3.11
  script:
    - pip install -r requirements.txt
    - python setup.py build

unit_tests:
  stage: test
  image: python:3.11
  script:
    - pip install -r requirements.txt
    - pytest --cov=app tests/
  coverage: '/TOTAL.+?(\d+%)/'

lint:
  stage: quality
  image: python:3.11
  script:
    - pip install ruff mypy
    - ruff check .
    - mypy app/

security:
  stage: quality
  image: python:3.11
  script:
    - pip install bandit safety
    - bandit -r app/
    - safety check

deploy_staging:
  stage: deploy
  script:
    - ./deploy.sh staging
  only:
    - main
  when: manual

Честно? Большинство команд останавливается на test. Добавляют lint, если лид настаивает. Security — редкость. А жаль, потому что именно на этом этапе ловятся уязвимости, которые потом всплывают на аудитах.

Автоматизация code review

Отдельная тема. Code review — это bottleneck. Один мой знакомый лид тратил 3 часа в день на ревью. Каждый день. И всё равно баги пролетали.

Автоматизировать code review полностью нельзя. Но можно убрать рутину. Проверка стиля, поиск типовых багов, анализ безопасности — это машина должна делать, не человек.

Для этого есть инструменты. Linters, статические анализаторы, AI-боты. Последние — отдельный класс. Они не просто ищут паттерны, а понимают контекст.

Вот как это выглядит в пайплайне:

code_review:
  stage: quality
  image: curlimages/curl
  script:
    - |
      curl -X POST "https://api.distiq.ru/v1/review" \
        -H "Authorization: Bearer $DISTIQ_TOKEN" \
        -H "Content-Type: application/json" \
        -d '{"project_id": "'$CI_PROJECT_ID'", "mr_id": "'$CI_MERGE_REQUEST_IID'"}'
  only:
    - merge_requests

AI-бот анализирует MR и оставляет инлайн-комментарии. Не вместо человека, а до человека. Ревьюер получает MR, где уже отмечены типовые проблемы. Его задача — проверить логику и архитектуру, а не искать пропущенные точки с запятой.

На одном проекте мы внедрили такую схему. Время ревью упало с 3 часов до 1. Количество пролетевших багов — на 40% меньше. Цифры не с потолка, мы мерили Jira-метрики полгода.

Инструменты для разных уровней

Уровень 1-2: Make, npm scripts, shell-скрипты. Простая автоматизация без оверхеда.

Уровень 3: Jenkins, GitLab CI, GitHub Actions, CircleCI. Любой современный CI-сервер справится.

Уровень 4: Docker, Kubernetes, Terraform, Ansible. Тут уже нужна инфраструктура как код.

Для статического анализа: SonarQube, ESLint, Pylint, RuboCop. Выбор зависит от стека.

Для безопасности: Snyk, Dependabot, OWASP Dependency-Check.

Для code review: AI-инструменты. Distiq, например, если нужен российский сервис с серверами в РФ. Или CodeRabbit, если вам всё равно, где данные.

Главное — не пытаться внедрить всё сразу. Start small. Собрали статистику? Поняли, где болит? Добавили один инструмент. Измерили результат. Добавили следующий.

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

Когда какой уровень нужен

Если вы стартап из трёх человек — уровень 2 достаточно. CI есть, тесты бегают, деплой руками раз в неделю. Норм.

Если вы команда из 10+ человек — нужен уровень 3 минимум. Без обязательного code review и зелёного пайплайна для merge вы утонете в багах.

Если вы enterprise или fintech — уровень 4 обязателен. Регуляторы, аудиторы, security-требования не оставляют выбора.

Но есть и обратная сторона. Автоматизация ради автоматизации — зло. Я видел пайплайны из 20 стадий, которые бегут по 2 часа. Разработчики ждут, устают, тыкают "merge anyway". Результат — обратный ожидаемому.

Правило простое: каждый шаг в пайплайне должен нести ценность. Не несёт? Убираем.


Кстати, про автоматизацию code review. Мы в Distiq как раз про это думали, когда делали продукт. AI-бот, который смотрит каждый MR, оставляет комментарии, ловит баги до ревьюера. Поддерживает GitLab, GitHub, GitVerse. Интеграция через webhook — добавили репозиторий, и бот начал работать. Если думаете над следующим уровнем автоматизации в своей команде — попробуйте. Это бесплатно для небольших команд.

Попробуйте Distiq для автоматического code review

AI-бот анализирует каждый MR/PR и оставляет комментарии с замечаниями. Интеграция за 2 минуты.

Попробовать бесплатно

Похожие статьи