DevOps & CI/CD

CI/CD

Continuous Integration и Continuous Delivery/Deployment — практика автоматической сборки, тестирования и выкатки кода после каждого коммита.

Что такое CI/CD

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

  • CI — Continuous Integration (непрерывная интеграция): каждый коммит попадает в общую ветку и сразу проверяется автоматической сборкой и тестами. Цель — ловить конфликты и поломки за минуты, а не через две недели на релизе.
  • CD — Continuous Delivery (непрерывная поставка): после успешного CI артефакт автоматически доводится до состояния «готов к выкатке», а сам деплой запускает человек одной кнопкой.
  • CD — Continuous Deployment (непрерывное развёртывание): более строгий вариант — прошедший тесты коммит уезжает в production без ручного подтверждения.

Обе расшифровки CD официальны и отличаются ровно одним: есть ли ручной шаг перед production.

Continuous Delivery vs Continuous Deployment

Continuous Delivery Continuous Deployment
Выкатка в prod Ручное подтверждение Автоматически
Артефакт готов всегда Да Да
Требования к тестам Высокие Очень высокие
Кому подходит Банки, энтерпрайз, релизы по расписанию SaaS, веб-сервисы, десятки релизов в день

Зачем это нужно

Без CI ошибка интеграции обнаруживается на этапе слияния больших веток — когда причину уже трудно локализовать. С CI поломка привязана к конкретному коммиту и конкретному автору.

Практический эффект:

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

Из чего состоит CI/CD

Автоматизацию описывает CI/CD pipeline — последовательность стадий, которую выполняет сервер сборки после push в Git-репозиторий:

push → build → test → security scan → образ в registry → deploy на staging → deploy в prod

Типовой минимум для веб-сервиса:

  1. Build — собрать артефакт или Docker-образ.
  2. Test — unit-тесты, линтеры, статический анализ.
  3. Publish — положить образ в Docker Registry.
  4. Deploy — выкатить в Kubernetes или на серверы через Ansible.

Инструменты

Инструмент Где живёт Особенность
GitLab CIВстроен в GitLab.gitlab-ci.yml, свои runner'ы, self-hosted-вариант
GitHub ActionsВстроен в GitHubОгромный каталог готовых actions
Jenkins Self-hosted Максимально гибкий, требует обслуживания
Bitbucket Pipelines Встроен в BitbucketПростой YAML, интеграция с Jira

Минимальный пример

.gitlab-ci.yml, который собирает образ и выкатывает его:

stages: [test, build, deploy]

test:
  stage: test
  image: python:3.12
  script:
    - pip install -r requirements.txt
    - pytest -q

build:
  stage: build
  image: docker:27
  script:
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA

deploy:
  stage: deploy
  script:
    - kubectl set image deployment/api api=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
  when: manual          # убрать — получится Continuous Deployment
  only: [main]

Где это выполняется

Задачи CI/CD выполняют runner'ы — процессы на отдельных машинах. Их держат на VPS или облачных серверах: сборка требует CPU, диска под кеши и слои образов. Для ML-пайплайнов runner ставят на GPU-машину — тесты инференса и прогон моделей без видеокарты бессмысленны.

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

  • CI/CD pipeline — конкретная последовательность стадий
  • GitLab — платформа со встроенным CI и runner'ами
  • GitHub — платформа с GitHub Actions
  • DevOps — культура, частью которой является CI/CD
  • Стратегии деплоя — как именно выкатывать на последнем шаге
  • GitOps / IaC — инфраструктура и деплой, описанные кодом

Готовы запустить GPU-задачу?

Запустить GPU-сервер