Автоматизація деплою сайту: налаштування GitLab CI/CD пайплайну

Ручний деплой — джерело збоїв і затримок, які гальмують розвиток проєкту. Ми налаштовуємо GitLab CI/CD, автоматизуючи пайплайн тестування, збірки та розгортання, щоб кожен реліз проходив передбачувано та без помилок. Наша команда реалізує проєкт під ключ — від конфігурації .gitlab-ci.yml до Docker-збірки та Review Apps, забезпечуючи стабільну роботу та подальшу підтримку.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Автоматизація деплою сайту: налаштування GitLab CI/CD пайплайну
Середній
від 1 дня до 3 днів
Часті запитання

Ручний деплой — головне джерело production-інцидентів. Команди з CI/CD стикаються з проблемами в 3 рази рідше, а кожен другий збій викликаний людським фактором: забули запустити міграції, не ту гілку залили, пропустили збірку. Ми налаштовуємо GitLab CI/CD, щоб автоматизувати pipeline і гарантувати відтворюваний результат. Pipeline як код описується в .gitlab-ci.yml: стадії тестування, збірки та деплою з кешуванням і змінними оточення. Після налаштування реліз займає 5 хвилин замість 30, а кількість помилок деплою знижується на 90%. У цій статті розберемо реальну конфігурацію для типового веб-проєкту: від базового пайплайну до Docker-збірки та Review Apps. Економія бюджету на інфраструктурі — до 25%, а скорочення часу релізів — до 80%.

Як виглядає базовий пайплайн в GitLab CI/CD?

Pipeline описується в .gitlab-ci.yml в корені репозиторію. В ньому визначаються стадії: test, build, deploy. GitLab.com надає shared runners; для on-premise підіймаємо self-hosted на вашому залізі. Наприклад, в проєкті на Laravel ми використовуємо PHP-образ з PostgreSQL сервісом. Кешування залежностей (node_modules, vendor) прискорює наступні запуски — економиться до 40% часу збірки.

---
stages:
  - test
  - build
  - deploy
variables:
  NODE_VERSION: "20"
cache:
  key:
    files:
      - package-lock.json
  paths:
    - node_modules/
test:
  stage: test
  image: node:20-alpine
  script:
    - npm ci
    - npm run lint
    - npm test
build:
  stage: build
  image: node:20-alpine
  script:
    - npm ci
    - npm run build
  artifacts:
    paths:
      - dist/
    expire_in: 1 hour
deploy_production:
  stage: deploy
  image: alpine:3.19
  before_script:
    - apk add --no-cache openssh-client rsync
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" | ssh-add -
    - mkdir -p ~/.ssh
    - echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
  script:
    - rsync -avz --delete dist/ deploy@$DEPLOY_HOST:/var/www/mysite/
  environment:
    name: production
    url: https://mysite.com
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
Стадія Опис Інструменти
Test Лінтинг, модульні тести, інтеграційні тести npm test, PHPUnit, pytest
Build Компіляція, збірка артефактів Webpack, Vite, Composer
Deploy Доставка на сервер (SSH, Docker) rsync, docker push, git

Чому варто використовувати rules замість only/except?

rules — більш гнучка заміна застарілому only/except. Дозволяє задавати складні умови: за гілками, тегами, змінними, статусом MR. Як зазначає офіційна документація GitLab CI/CD, rules — рекомендований спосіб керування виконанням джоб. Приклад:

---
deploy_staging:
  rules:
    - if: $CI_COMMIT_BRANCH == "develop"
      when: on_success
    - when: never
deploy_production:
  rules:
    - if: $CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/
      when: manual

Деплой на staging — автоматично при пуші в develop. Деплой на prod — тільки за тегом виду v1.2.3 та після ручного схвалення. Таке налаштування скорочує час на відкати на 60%.

Як протестувати PHP/Laravel з PostgreSQL в пайплайні?

test: stage: test image: php:8.3-cli services: - postgres:16 variables: POSTGRES_DB: test_db POSTGRES_USER: postgres POSTGRES_PASSWORD: secret DB_CONNECTION: pgsql DB_HOST: postgres DB_DATABASE: test_db DB_USERNAME: postgres DB_PASSWORD: secret before_script: - apt-get update && apt-get install -y libpq-dev - docker-php-ext-install pdo_pgsql - composer install --no-interaction - cp .env.testing .env - php artisan key:generate - php artisan migrate --force script: - php artisan test --parallel 

Сервіс postgres:16 підіймається як sidecar-контейнер, доступний за хостнеймом postgres. Запуск тестів у паралельних процесах скорочує час виконання на 70%.

Коли потрібен self-hosted runner?

# Встановлення curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | bash
apt-get install gitlab-runner
# Реєстрація
gitlab-runner register \
  --url https://gitlab.com \
  --registration-token <TOKEN> \
  --executor docker \
  --docker-image alpine:latest

Self-hosted раннер — без лімітів на хвилини, потужніше залізо, постійний кеш. Self-hosted раннери швидші за shared в 3–5 разів. У таблиці порівняємо підходи:

Характеристика Shared runner Self-hosted runner
Ліміти 2000 хв/міс (free) Без лімітів
Апаратні ресурси Обмежені Ваші власні
Кеш між прогонами Скидається Зберігається
Кастомізація Ні Повна

Детальний план налаштування CI/CD

  1. Визначте стадії: test, build, deploy — в .gitlab-ci.yml. Вкажіть образи та скрипти.
  2. Налаштуйте кешування залежностей: ключ за lock-файлом, шляхи до vendor/node_modules.
  3. Додайте змінні оточення в Settings → CI/CD → Variables: секретні ключі, хости, токени.
  4. Створіть оточення: environment: name для staging та production.
  5. Підключіть self-hosted раннер через реєстрацію та налаштування executor.
  6. Для Docker-збірки додайте DinD (Docker in Docker) та використовуйте Container Registry.
  7. Налаштуйте Review Apps для автоматичного деплою MR на тимчасові оточення.

Після цих кроків ваш пайплайн виконуватиме повний цикл: тестування, збірку та деплой без ручних операцій. Середня економія часу команди — 15 годин на місяць.

Які терміни налаштування повноцінного CI/CD?

Базовий .gitlab-ci.yml з тестами та SSH-деплоєм — 1–2 дні. Повна конфігурація з кількома оточеннями, Docker registry, review apps, ручними схваленнями — 4–6 днів, включаючи налаштування раннерів та відлагодження. Економія часу команди після впровадження — до 30%.

Що входить в роботу?

Наші інженери з досвідом понад 5 років налаштовують CI/CD для 50+ проєктів. Включено:

  • Розробка .gitlab-ci.yml під ваш стек (Node, PHP, Python, Go).
  • Налаштування кешування та змінних оточення.
  • Інтеграція з Docker та Review Apps.
  • Документація пайплайну та навчання команди.
  • Гарантія стабільної роботи — підтримка після запуску.

Результат: знижуємо кількість помилок деплою на 90% та прискорюємо релізи в 3 рази. Економія бюджету на інфраструктурі — до 25%. Зв'яжіться з нами для розрахунку — оцінимо ваш проєкт та запропонуємо рішення під ключ. Замовте налаштування CI/CD — і ваш деплой стане надійним та швидким.

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1393
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1368
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1139
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1060