CI/CD конвейеры на примере GitHub Actions

DevOps2026-09-12TryQuickToolBox

Вы только что сделали коммит, а теперь вручную запускаете тесты, собираете приложение и загружаете файлы на сервер. Это работает, но медленно, чревато ошибками и не масштабируется. Здесь на помощь приходят CI/CD конвейеры.

В этом руководстве мы разберём концепции CI/CD и покажем, как построить реальный конвейер с помощью GitHub Actions. К концу вы поймёте, как автоматизировать тестирование, сборку и развёртывание для любого проекта.

Что такое CI/CD?

CI (непрерывная интеграция) — это практика автоматического тестирования и слияния изменений кода в общую ветку. Каждый push запускает сборку и тесты, позволяя выявлять проблемы интеграции на раннем этапе.

CD (непрерывная доставка/развёртывание) расширяет CI, автоматически подготавливая (и, опционально, развёртывая) ваше приложение в production. Непрерывная доставка означает, что код всегда готов к развёртыванию; непрерывное развёртывание — что он развёртывается автоматически.

Вместе CI/CD образуют конвейер: последовательность автоматизированных шагов, которые проводят ваш код от коммита до production.

Почему стоит использовать GitHub Actions для CI/CD?

GitHub Actions — это платформа CI/CD, встроенная в GitHub. Она бесплатна для публичных репозиториев и предлагает щедрые минуты для приватных. Ключевые преимущества:

Основные концепции GitHub Actions

Прежде чем писать свой первый workflow, ознакомьтесь с этими терминами:

Термин Описание
Workflow Автоматизированный процесс, определённый в YAML-файле в .github/workflows/.
Event Триггер, запускающий workflow (например, push, pull_request).
Job Набор шагов, выполняемых на одном runner. Jobs по умолчанию запускаются параллельно.
Step Отдельная задача внутри job. Может выполнять команду или использовать action.
Action Переиспользуемая единица кода (например, actions/checkout), которую можно включить в step.
Runner Виртуальная машина, выполняющая jobs (Ubuntu, Windows, macOS).

Создание вашего первого CI-конвейера

Давайте создадим базовый CI workflow для проекта на Node.js. Он будет запускать тесты при каждом push и pull request в основную ветку.

Создайте .github/workflows/ci.yml:

name: CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  test:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [18.x, 20.x]

    steps:
    - uses: actions/checkout@v4
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v4
      with:
        node-version: ${{ matrix.node-version }}
    - run: npm ci
    - run: npm test

Этот workflow:

  1. Запускается при push и PR в main.
  2. Выполняет job с именем test на последнем Ubuntu runner.
  3. Использует матрицу для тестирования на Node.js 18 и 20.
  4. Клонирует код, настраивает Node, устанавливает зависимости и запускает тесты.

Запушьте этот файл и откройте вкладку Actions. Вы увидите два параллельных job (по одному на версию Node). Если какой-либо тест упадёт, workflow завершится с ошибкой, и GitHub уведомит вас.

Добавление непрерывного развёртывания

CI — это здорово, но CD — где автоматизация сияет. Давайте расширим workflow, чтобы развёртывать на сервер после успешных тестов в основной ветке.

Мы добавим job deploy, который зависит от test и выполняется только при push в main.

  deploy:
    needs: test
    if: github.ref == 'refs/heads/main' && github.event_name == 'push'
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4
    - name: Deploy to server
      uses: appleboy/ssh-action@v1.0.0
      with:
        host: ${{ secrets.SSH_HOST }}
        username: ${{ secrets.SSH_USER }}
        key: ${{ secrets.SSH_KEY }}
        script: |
          cd /var/www/myapp
          git pull origin main
          npm ci --production
          pm2 restart myapp

Ключевые моменты:

Этот шаблон подходит для многих целей развёртывания: SSH, Docker-реестры, облачные платформы (AWS, Vercel, Netlify) или Kubernetes.

Лучшие практики CI/CD с GitHub Actions

Отладка неудачных workflow

Когда workflow падает, GitHub показывает логи для каждого шага. Распространённые проблемы:

Также можно включить отладочное логирование, установив секрет репозитория ACTIONS_STEP_DEBUG в true.

FAQ

В чём разница между CI и CD?

CI автоматизирует тестирование и интеграцию изменений кода. CD автоматизирует доставку или развёртывание этих изменений в среду. CI обеспечивает качество кода; CD — быстрое и надёжное попадание кода к пользователям.

GitHub Actions бесплатен?

GitHub Actions бесплатен для публичных репозиториев. Для приватных репозиториев вы получаете ежемесячный лимит бесплатных минут (например, 2 000 минут для бесплатных аккаунтов) и платите за дополнительное использование. Также возможны self-hosted runners.

Можно ли использовать GitHub Actions для проектов не на GitHub?

Да, GitHub Actions может запускать любые инструменты командной строки. Вы можете использовать его для сборки и развёртывания проектов, размещённых в другом месте, если код находится на GitHub или вы используете actions для его получения.

Готовы оптимизировать свой CI/CD? Начните с автоматизации тестов с помощью GitHub Actions. Для быстрого анализа логов развёртывания попробуйте наш Nginx Log Analyzer, чтобы выявлять ошибки и проблемы производительности после каждого деплоя.