Что такое CI/CD и как задеплоить проект с помощью GitHub Actions
Автоматизация сборки и доставки кода — ключевой элемент современной разработки. Здесь на помощь приходит подход CI/CD (Continuous Integration / Continuous Delivery, непрерывная интеграция и доставка). А для его реализации удобно использовать такие инструменты, как GitHub Actions.
В этой статье разберём, что такое CI/CD, зачем он нужен, и на конкретном примере покажем, как настроить деплой проекта через GitHub Actions.
Что такое CI/CD
CI (Continuous Integration, непрерывная интеграция)
Каждый разработчик регулярно сливает изменения в общий репозиторий. При этом автоматически запускаются проверки: тесты, линтеры, сборка. Это помогает выявлять ошибки на ранних этапах.
CD (Continuous Delivery / Deployment, непрерывная доставка/развёртывание)
После успешной интеграции изменения автоматически доставляются на staging или production-сервер. Это избавляет от ручных шагов при релизе и снижает риск ошибок.
CI/CD даёт бизнесу более быстрый релиз фич и гарантирует стабильность кода.
Зачем использовать GitHub Actions
GitHub Actions — это встроенный в GitHub сервис CI/CD. Его преимущества:
- Не нужно отдельного сервера для CI, всё работает в облаке GitHub.
- Простая интеграция с pull request’ами, issues и релизами.
- Поддержка готовых экшенов из Marketplace.
- Возможность писать собственные шаги на Bash, Node.js или Docker.
Пример: Автодеплой Node.js-приложения
1. Создаём workflow-файл
В корне репозитория создайте папку .github/workflows/
и файл deploy.yml
:
name: Deploy Project
on:
push:
branches:
- main # запускать при пуше в main
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: 18
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
- name: Build project
run: npm run build
- name: Deploy to server
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SERVER_SSH_KEY }}
script: |
cd /var/www/project
git pull origin main
npm install --production
pm2 restart app
2. Настройка секретов
В GitHub откройте Settings → Secrets and variables → Actions и добавьте:
SERVER_HOST
— IP или домен сервера.SERVER_USER
— имя пользователя для подключения.SERVER_SSH_KEY
— приватный SSH-ключ (без пароля).
3. Как это работает
- При пуше в
main
GitHub запускает workflow. - Проект собирается и тестируется.
- Подключение по SSH к серверу и обновление кода.
- Перезапуск приложения через PM2 (или любой другой процесс-менеджер).
Просмотр результатов Workflow
Чтобы увидеть результаты выполнения GitHub Actions workflow:
- Перейдите на главную страницу репозитория и нажмите Actions в панели под названием репозитория.
- В левой боковой панели отобразятся все workflows. Нажмите на тот, который соответствует вашему файлу — например, Deploy Project, как мы назвали его в примере ранее.
- В центральной части появится список всех запусков. Выберите тот, который ссылается на файл deploy.yml, чтобы посмотреть результаты именно этого workflow.
- В левой части под заголовком Jobs выберите задание (например, build-and-deploy).
- Откроется лог, показывающий выполнение каждого шага и соответствующий вывод.
- Для шагов
npm install
иnpm test
можно увидеть весь вывод команд. - Если кликнуть на шаг Deploy to server, отобразится лог подключения по SSH и результат деплоя.
- Для шагов
GitHub также предоставляет готовые workflows, которые можно использовать как шаблоны и адаптировать под свой проект. Более того, он сам подскажет подходящий стартовый workflow в зависимости от используемых языков и фреймворков в репозитории.
Пример лога:
build-and-deploy
✔ Set up job
✔ Checkout repository
✔ Install dependencies
> npm install
added 152 packages in 4s
✔ Run tests
> npm test
PASS tests/app.test.js
Test Suites: 1 passed, 1 total
Tests: 3 passed, 3 total
✔ Build project
> npm run build
Creating an optimized production build...
Compiled successfully in 8s
✔ Deploy to server
> ssh user@yourserver.com "cd /var/www/project && git pull && pm2 restart app"
Already up to date.
[PM2] Restarted app (id:0)
✔ Job complete
В интерфейсе GitHub Actions это выглядит как список шагов с зелёными галочками ✅ (или красным крестиком ❌, если что-то пошло не так).
Если кликнуть на любой шаг, раскроется его консольный вывод, как в примере выше.
Расширение пайплайна
С GitHub Actions можно добавлять:
- уведомления в Slack или Telegram;
- деплой в Docker или Kubernetes;
- публикацию образов в Docker Hub или GitHub Container Registry;
- выкладку статики в AWS S3, Google Cloud Storage или Cloudflare Pages.
Заключение
CI/CD — это стандарт современной разработки, который позволяет быстрее и безопаснее доставлять код пользователям.
GitHub Actions упрощает настройку пайплайна прямо из репозитория без лишней инфраструктуры.
Настроить мониторинг за 30 секунд
Надежные оповещения о даунтаймах. Без ложных срабатываний