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
Типовой минимум для веб-сервиса:
- Build — собрать артефакт или Docker-образ.
- Test — unit-тесты, линтеры, статический анализ.
- Publish — положить образ в Docker Registry.
- 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-сервер