Налаштування CI/CD для сайту через GitHub Actions
Кожен другий реліз на production зривається через людський фактор: забули залити файл, не оновили конфіг, пропустили тести. CI/CD виключає ці ризики. Ми, в компанії з 5-річним досвідом, налаштували понад 50 пайплайнів для проектів від лендінгів до високонавантажених SaaS. GitHub Actions — наш вибір для швидкої автоматизації. Замовте налаштування — отримайте готовий пайплайн за 1–5 днів.
Чому GitHub Actions?
На відміну від Jenkins або GitLab CI, не потрібно піднімати окремий сервер, налаштовувати вебхуки та плагіни. Все керується через YAML-файли в репозиторії. Для публічних проектів — безстроково безкоштовно. Для приватних — 2000 хвилин на місяць на безкоштовному тарифі, чого вистачає на 400–1000 деплоїв. При перевищенні ліміту можна підключити self-hosted runner на своєму сервері — хвилини не витрачаються. GitHub Actions в 2 рази швидше налаштовується, ніж GitLab CI, і не потребує сервера, на відміну від Jenkins.
Пришвидшення збірки кешуванням
Документація GitHub рекомендує кешувати залежності для прискорення workflow. Кешування залежностей — головний прискорювач. actions/setup-node з параметром cache: 'npm' автоматично кешує ~/.npm. Для PHP використовуйте actions/cache з ключем по composer.lock.
- uses: actions/cache@v4
with:
path: vendor
key: composer-${{ hashFiles('composer.lock') }}
Після прогріву кешу час прогону падає з 3–5 хвилин до 60–90 секунд — це в 4 рази швидше. Матричні збірки (кілька версій Node.js) виконуються паралельно і кешуються окремо. Економія часу команди — 3 години на тиждень, що при середній ставці DevOps $50/год дає до $600 на місяць (близько 22 000 грн).
Структура воркфлоу (мінімальний приклад)
Мінімальний воркфлоу для сайту на Node.js з деплоєм на сервер по SSH. Цей приклад базується на офіційній документації GitHub Actions:
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. Жодні ключі або паролі не потрапляють у код. Для різних оточень використовуємо Environments — кожен набір секретів ізольовано. Деплой в production можна захистити ручним схваленням.
- name: Configure .env
run: |
echo "DATABASE_URL=${{ secrets.DATABASE_URL }}" >> .env
echo "APP_KEY=${{ secrets.APP_KEY }}" >> .env
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 доступний безкоштовно, авторизація через вбудований GITHUB_TOKEN.
Сповіщення про статус
- 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().
Покрокова інструкція налаштування CI/CD
- Створіть в корені репозиторію папку
.github/workflows. - Додайте файл
deploy.ymlз конфігурацією (приклад вище). - Налаштуйте секрети в Settings → Secrets and variables → Actions.
- Запуште зміни в гілку main — воркфлоу запуститься автоматично.
- Перевірте статус у вкладці Actions репозиторію.
- При успіху — деплой виконано. При помилці — отримаєте сповіщення.
Порівняння: GitHub Actions vs інші CI/CD
| Платформа | Простота налаштування | Необхідність сервера | Безкоштовний ліміт | Середній час налаштування |
|---|---|---|---|---|
| GitHub Actions | Висока | Ні | 2000 хв/міс (приватні) | 1-2 дні |
| GitLab CI | Середня | Ні (але може self-hosted) | 400 хв/міс | 2-3 дні |
| Jenkins | Низька | Так | Необмежений (свій сервер) | 3-7 днів |
GitHub Actions простіше в налаштуванні, ніж Jenkins, і не потребує виділеного сервера. Для більшості веб-проектів це оптимальний вибір.
Етапи налаштування та терміни
| Етап | Тривалість | Результат |
|---|---|---|
| Аналіз проекту | 1-2 години | Розуміння процесу деплою та стеку |
| Створення воркфлоу | 1-2 дні | YAML-файл з тестами, збіркою, деплоєм |
| Налаштування секретів | 1 годину | Безпечне зберігання ключів |
| Оптимізація кешу | 2-3 години | Збірка за 60-90 секунд |
| Інтеграція сповіщень | 1-2 години | Оповіщення в Telegram/Slack |
| Тестування та налагодження | 1 день | Стабільна робота пайплайна |
Що входить у роботу (під ключ)
Ми надаємо повний цикл налаштування CI/CD під ключ:
- Аналіз поточного процесу деплою та архітектури проекту
- Створення YAML-воркфлоу з тестами, збіркою, деплоєм
- Налаштування секретів та оточень у репозиторії
- Оптимізація швидкості збірки (кешування, матриці)
- Інтеграція сповіщень (Telegram, Slack, email)
- Документація по воркфлоу та інструкція для команди
- Навчання розробників роботі з пайплайном
Повний приклад конфігу для Node.js + Docker
name: Deploy
on: [push]
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
- name: Build Docker image
run: docker build -t myapp .
- name: Push to registry
run: docker push ghcr.io/myorg/myapp:latest
deploy:
needs: build
runs-on: ubuntu-22.04
steps:
- name: Deploy via SSH
uses: appleboy/[email protected]
with:
host: ${{ secrets.DEPLOY_HOST }}
username: deploy
key: ${{ secrets.DEPLOY_KEY }}
script: |
docker pull ghcr.io/myorg/myapp:latest
docker-compose up -d
Наші результати та досвід
Більше 5 років ми налаштовуємо CI/CD для проектів різної складності — від лендінгів до високонавантажених SaaS. Понад 50 реалізованих пайплайнів з гарантією стабільної роботи. Кожен кейс документуємо, щоб команда замовника могла самостійно підтримувати та доопрацьовувати пайплайн. Вартість простоїв через помилки деплою може сягати 100 000 грн на день — CI/CD це виключає.
Терміни та вартість
- Базовий воркфлоу (тест + деплой по SSH) — 1–2 дні, від 3000 грн під ключ.
- Повний pipeline (матриці, Docker, сповіщення, ручні схвалення) — 3–5 днів, від 8000 грн під ключ.
Вартість розраховується індивідуально. Напишіть нам для консультації — оцінимо проект безкоштовно.







