Настройка CI/CD для сайта через GitHub Actions

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.
Разработка и обслуживание любых видов сайтов:
Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Настройка CI/CD для сайта через GitHub Actions
Средняя
от 1 рабочего дня до 3 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1214
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    852
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1041
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    823
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    815

Настройка CI/CD для сайта через GitHub Actions

GitHub Actions встроен прямо в репозиторий — никаких внешних серверов, никаких отдельных аккаунтов. Воркфлоу описываются в YAML и хранятся в .github/workflows/. Для большинства веб-проектов этого достаточно, чтобы закрыть полный цикл: тесты, сборка, деплой.

Структура воркфлоу

Минимальный воркфлоу для сайта на Node.js с деплоем на сервер по SSH:

# .github/workflows/deploy.yml
name: Deploy

on:
  push:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
          cache: 'npm'
      - run: npm ci
      - run: npm test

  build:
    needs: test
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
          cache: 'npm'
      - run: npm ci
      - run: npm run build
      - uses: actions/upload-artifact@v4
        with:
          name: dist
          path: dist/

  deploy:
    needs: build
    runs-on: ubuntu-22.04
    environment: production
    steps:
      - uses: actions/download-artifact@v4
        with:
          name: dist
          path: dist/
      - name: Deploy via rsync
        uses: burnett01/[email protected]
        with:
          switches: -avzr --delete
          path: dist/
          remote_path: /var/www/mysite
          remote_host: ${{ secrets.DEPLOY_HOST }}
          remote_user: deploy
          remote_key: ${{ secrets.DEPLOY_KEY }}

Три джоба: тест → сборка → деплой. Если тесты упали — сборка не запустится. Если сборка не артефактирована — деплоить нечего.

Управление секретами

Все чувствительные данные — в Settings → Secrets and variables → Actions. Никакие ключи, пароли, токены не попадают в код.

# Использование секретов
- name: Configure .env
  run: |
    echo "DATABASE_URL=${{ secrets.DATABASE_URL }}" >> .env
    echo "APP_KEY=${{ secrets.APP_KEY }}" >> .env

Для разграничения prod/staging используют Environments (Settings → Environments). Каждое окружение — свой набор секретов и опциональное требование ручного одобрения деплоя:

deploy:
  environment:
    name: production
    url: https://mysite.com

Матричные сборки и кеширование

Если нужно тестировать под несколькими версиями Node.js:

strategy:
  matrix:
    node-version: [18, 20, 22]

Кеш зависимостей существенно ускоряет прогоны. actions/setup-node с параметром cache: 'npm' кеширует ~/.npm автоматически. Для composer, pip, cargo — аналогичные экшены или actions/cache напрямую:

- uses: actions/cache@v4
  with:
    path: vendor
    key: composer-${{ hashFiles('composer.lock') }}

Типичное время прогона после прогрева кеша: 60–90 секунд против 3–5 минут с нуля.

PHP/Laravel проект

- name: Setup PHP
  uses: shivammathur/setup-php@v2
  with:
    php-version: '8.3'
    extensions: pdo_pgsql, redis, opcache
    coverage: none

- run: composer install --no-dev --optimize-autoloader
- run: php artisan config:cache
- run: php artisan route:cache
- run: php artisan view:cache

Docker-сборка и пуш в Registry

Если деплой идёт через контейнеры:

- name: Build and push Docker image
  uses: docker/build-push-action@v5
  with:
    context: .
    push: true
    tags: ghcr.io/${{ github.repository }}:${{ github.sha }}
    cache-from: type=gha
    cache-to: type=gha,mode=max

GitHub Container Registry (ghcr.io) доступен бесплатно, авторизация через GITHUB_TOKEN — встроенный токен, не нужно создавать отдельно.

Деплой на разные платформы

Платформа Экшен / метод
VPS по SSH appleboy/ssh-action или rsync
AWS S3 + CloudFront aws-actions/configure-aws-credentials
Vercel amondnet/vercel-action
Kubernetes azure/k8s-deploy или kubectl напрямую
Docker Swarm SSH + docker stack deploy

Уведомления

- name: Notify Telegram on failure
  if: failure()
  uses: appleboy/telegram-action@master
  with:
    to: ${{ secrets.TELEGRAM_CHAT_ID }}
    token: ${{ secrets.TELEGRAM_TOKEN }}
    message: "❌ Deploy failed: ${{ github.repository }} @ ${{ github.sha }}"

if: failure() — условие запускается только при сбое. if: always() — всегда, независимо от результата.

Ограничения бесплатного плана

Публичные репозитории — бесплатно без ограничений. Приватные: 2 000 минут/месяц на бесплатном плане, 3 000 на Pro. Один прогон занимает 2–5 минут — хватает на 400–1 000 деплоев в месяц. При превышении можно подключить self-hosted runner на своём сервере.

Сроки настройки

Базовый воркфлоу (тест + деплой по SSH) — 1–2 дня: написание YAML, настройка секретов, отладка первых прогонов. Полный pipeline с матрицей окружений, Docker, уведомлениями, ручными одобрениями — 3–5 дней.