Всем привет! Если вы хоть раз выкатывали баги в прод или ловили лютую боль при ручном деплое, то наверняка слышали про CI/CD. Это не магия, а просто способ автоматизировать всё, что можно автоматизировать, чтобы не было мучительно больно за свои коммиты. В этом посте разберёмся, что такое CI/CD pipeline, зачем он нужен, как его поднять на коленке и что делать, если что-то пошло не так. Всё будет на реальных примерах, без занудства.
Возможности CI/CD
- Автоматизация тестов и сборки — никакого “ой, забыл запустить тесты”.
- Быстрый и безопасный деплой — пушнул в main, через пару минут код уже на сервере.
- Меньше человеческого фактора — роботы не устают и не забывают.
- Легко масштабируется — хочешь деплой на 10 серверов? Пару строчек в конфиге, и готово.
Что потребуется для старта?
- ОС: любой Linux (Ubuntu 22.04 — самое простое, но можно и CentOS, Debian, даже MacOS, если очень хочется)
- Железо: хватит VPS с 2ГБ RAM и 1-2 CPU для старта, или любой старый ноут — главное, чтобы тянул Docker
- GitHub или GitLab репозиторий — пример будет на GitHub Actions, но можно и на GitLab CI
- Docker — не обязателен, но очень советую, чтобы не плясать с зависимостями
- Прямые руки и желание автоматизировать
Установка: Пошаговая инструкция
Покажу на примере GitHub Actions — это бесплатно и работает из коробки, если у вас уже есть репозиторий на GitHub.
- Создаём папку для workflow:
В корне репозитория создаём папку.github/workflows
. - Добавляем файл workflow:
Создаём файлci.yml
(или любое другое имя) в.github/workflows
. - Пишем базовый pipeline:
name: CI on: push: branches: - main pull_request: jobs: build: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 with: python-version: "3.11" - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt - name: Run tests run: | pytest
Это минимальный рабочий пример для Python-проекта. Для Node, Go, Java — меняете шаги под свой стек.
- Пушим изменения:
git add .github/workflows/ci.yml && git commit -m "Add CI pipeline" && git push
- Проверяем результат:
Заходим во вкладку Actions на GitHub, смотрим зелёные (или красные) галочки.
Всё, теперь любой пуш или PR в main будет автоматически прогонять тесты.
Использование: команды и варианты
- Параметры запуска: Можно запускать workflow по расписанию (cron), по тегам, по релизам и т.д. Пример:
on: schedule: - cron: '0 3 * * *' # каждый день в 3:00 UTC
- Деплой на сервер: Можно добавить шаг деплоя через SSH:
- name: Deploy to server uses: appleboy/ssh-action@master with: host: ${{ secrets.HOST }} username: ${{ secrets.USER }} key: ${{ secrets.SSH_KEY }} script: | cd /var/www/myapp git pull docker-compose up -d --build
Секреты (HOST, USER, SSH_KEY) добавляются в настройках репозитория на GitHub (подробнее тут).
- Разделение на этапы: Можно делать отдельные jobs для тестов, сборки, деплоя, линтинга, и они могут идти параллельно или последовательно.
- Матричные сборки: Прогонять тесты на разных версиях Python/Node и ОС. Пример:
strategy: matrix: python-version: [3.9, 3.10, 3.11] os: [ubuntu-latest, macos-latest]
Типичные ошибки и как не надо делать
- Хардкодить пароли/ключи в workflow-файлы — используйте секреты!
- Делать один гигантский job — разбивайте pipeline, иначе дебажить будете до седых волос.
- Игнорировать статус тестов — если тесты не зелёные, не катите в прод (даже если “очень надо”).
- Не обновлять версии action’ов — используйте актуальные версии, иначе получите баги или уязвимости.
- Не чистить временные файлы — если билдите образы, не забывайте про cleanup, иначе диск быстро закончится.
Пример из реальной жизни
В одном pet-проекте на Django мы с командой устали вручную деплоить на VPS. Подняли CI/CD на GitHub Actions + деплой через SSH. Теперь любой pull request в main автоматически:
- Прогоняет тесты на разных версиях Python
- Собирает Docker-образ
- Пушит образ в Docker Hub
- Перезапускает контейнеры на сервере
В итоге — меньше факапов, больше времени на фичи. А главное — не надо в 2 ночи вспоминать, как руками деплоить.
Заключение
CI/CD — это не про “модно”, а про “удобно и надёжно”. Даже если у вас маленький проект — автоматизация деплоя и тестов сэкономит кучу времени и нервов. Начните с самого простого pipeline, а дальше уже можно будет выкручивать под себя. Для вдохновения и примеров — гляньте официальные гайды:
Автоматизируйте всё, что можно, и пусть ваши деплои будут зелёными!
Ваш отзыв