CI/CD (Continuous Integration / Continuous Delivery или Deployment) — практика автоматизации сборки, тестирования и доставки программного обеспечения. Позволяет командам выпускать изменения быстро, безопасно и предсказуемо, убирая ручные операции из процесса деплоя.
Как работает
При коммите в Git автоматически запускается пайплайн:
- CI (Continuous Integration) — сборка кода, запуск тестов, проверка линтером, сканирование уязвимостей. Если что-то сломалось — разработчик получает уведомление немедленно, не через неделю на Code Review.
- CD (Continuous Delivery) — артефакт (Docker-образ, архив) готов к деплою. Деплой на staging выполняется автоматически, на production — вручную или автоматически.
- Continuous Deployment — максимальная автоматизация: каждый прошедший тесты коммит автоматически деплоится в production.
История
Практику CI описал Кент Бек в книге «Extreme Programming Explained» (1999). Первым CI-сервером стал CruiseControl (2001). Jenkins (2011, форк Hudson) стал стандартом на годы. GitLab CI (2012) и GitHub Actions (2018) интегрировали CI/CD прямо в хостинг репозиториев. Сегодня каждый крупный GitHub/GitLab репозиторий имеет CI/CD пайплайн.
Инструменты CI/CD
- GitHub Actions — встроен в GitHub, YAML-workflow, marketplace action-ов, бесплатные минуты для публичных репо.
- GitLab CI/CD — мощный встроенный CI, runner-архитектура, Registry, Pages.
- Jenkins — самодостаточный сервер, 1800+ плагинов, Jenkinsfile-пайплайны. Сложнее в настройке, но гибче.
- Woodpecker CI — лёгкий self-hosted CI, совместим с Gitea/Forgejo.
- Coolify — self-hosted PaaS с встроенным CD через Git webhook.
Пример GitHub Actions workflow
# .github/workflows/deploy.yml
name: Deploy to VPS
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build Docker image
run: docker build -t myapp:${{ github.sha }} .
- name: Deploy via SSH
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.VPS_HOST }}
username: deploy
key: ${{ secrets.SSH_KEY }}
script: |
docker pull myapp:${{ github.sha }}
docker compose up -d
Деплой через webhook
Для простых проектов на VPS CI/CD через webhook: GitHub/GitLab отправляет HTTP-запрос на endpoint сервера при пуше в ветку. Сервер выполняет git pull && npm run build && pm2 restart app. Легковеснее полного CI-сервера, подходит для небольших проектов.
На что обращать внимание
CI/CD без rollback — неполный CI/CD. Каждый деплой должен иметь механизм отката: предыдущий Docker-образ, git revert, blue-green deployment. Секреты (API ключи, SSH-ключи) храните в CI/CD Secrets, никогда не в коде репозитория. Мониторинг после деплоя: Grafana с аннотацией деплоя позволяет коррелировать деплой с ростом ошибок или деградацией метрик.
Метрики CI/CD пайплайна в Grafana: Deployment Frequency (как часто деплоится), Lead Time for Changes (время от коммита до production), Change Failure Rate (доля деплоев, вызвавших инциденты), MTTR (среднее время восстановления). Это четыре метрики DORA — стандарт оценки DevOps-зрелости команды.