Налаштування GitLab Runner Self-Hosted (реєстрація, масштабування)

Ваші пайплайни простоюють у черзі, а shared runners не відповідають вимогам безпеки? Ми налаштовуємо власні GitLab Runner Self-Hosted, реєструємо їх під вашу інфраструктуру та масштабуємо під навантаження. Наша команда реалізує проєкт під ключ — від аудиту до підтримки, забезпечуючи стабільну роботу та надійне виконання завдань.
Часті запитання

Налаштування GitLab Runner Self-Hosted (реєстрація, масштабування)

Ваш пайплайн стоїть в черзі по 15 хвилин, поки shared runners GitLab.com зайняті? Або безпека вимагає, щоб складальні контейнери не йшли на чужі хости? Наші інженери налаштовують власні GitLab Runner вже 5 років — для проектів з навантаженням від 10 до 500+ джоб в день. Понад 50 успішних впроваджень в компаніях від стартапів до enterprise. Оцінимо вашу CI-інфраструктуру за один день і запропонуємо архітектуру, яка зменшить час очікування в рази.

Як налаштувати GitLab Runner з Docker executor?

Найпопулярніший варіант — Docker executor, де кожна джоба запускається в ізольованому контейнері. Реєстрація runner'а однією командою:

gitlab-runner register \
  --non-interactive \
  --url "https://gitlab.company.com" \
  --token "glrt-xxxxxxxxxxxx" \
  --executor "docker" \
  --docker-image "alpine:latest" \
  --docker-volumes "/var/run/docker.sock:/var/run/docker.sock" \
  --docker-privileged

Прапорець --docker-privileged потрібен тільки для Docker-in-Docker (dind). Якщо dind не потрібен — не використовуйте його: це розширює привілеї контейнера до хостового, що створює ризики безпеки. Альтернатива — використовувати docker:dind як sidecar-контейнер.

Ключові налаштування config.toml

Після реєстрації конфігурація лежить в /etc/gitlab-runner/config.toml. Параметр concurrent визначає, скільки джоб runner виконує одночасно. Значення підбирається під ресурси хоста: для 4-ядерної машини розумно 4–8. pull_policy = ["if-not-present"] зменшує час старту джоби, оскільки образи кешуються локально. Без цього налаштування runner при кожній джобі виконує docker pull, що сповільнює пайплайн і створює навантаження на registry.

concurrent = 10
[[runners]]
  name = "docker-runner-prod"
  url = "https://gitlab.company.com"
  token = "glrt-xxxxxxxxxxxx"
  executor = "docker"
  [runners.docker]
    image = "alpine:latest"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0
    pull_policy = ["if-not-present"]

Порівняння executor'ів

Executor Ізоляція Час старту Безпека Масштабування
Shell Немає Миттєво Низька Ручне
Docker Так 1–3 с Середня Ручне/авто
Kubernetes Так 10–30 с Висока Автоматичне

Kubernetes executor виграє в масштабуванні: він автоматично запускає Pod для кожної джоби, а при піковому навантаженні cluster autoscaler додає ноди. Це в 3–5 разів ефективніше за статичний Docker runner, коли вдень навантаження в 10 разів вище, ніж вночі.

Чому варто обрати Kubernetes executor?

Для команд зі змінним навантаженням (вночі CI майже не використовується, вдень — піки) оптимальна зв'язка runner в Kubernetes + Karpenter або Cluster Autoscaler. Деплоїмо runner через Helm:

helm repo add gitlab https://charts.gitlab.io
helm install gitlab-runner gitlab/gitlab-runner \
  --namespace gitlab-runner \
  --set gitlabUrl=https://gitlab.company.com \
  --set runnerToken=glrt-xxxxxxxxxxxx \
  --set rbac.create=true \
  --set runners.config="$(cat runner-config.toml)"

В runner-config.toml для Kubernetes executor вказуємо ресурси: cpu_request: 100m, cpu_limit: 2, memory_limit: 2Gi. Це гарантує, що кожна джоба не перевантажить кластер. При нестачі нод Karpenter піднімає нові за 60–90 секунд.

Порівняння стратегій кешування

Тип кешу Час запису Економія часу Складність налаштування
Без кешу 0 с 0% Немає
Локальний (диск) 1–3 с до 30% Низька
S3 (MinIO/AWS) 2–5 с до 40% Середня

При використанні S3-кешу час повторних збірок скорочується на 35–40%, а витрати на зберігання — мінімальні. Ми інтегруємо будь-який S3-сумісний бакет.

Що входить в налаштування GitLab Runner під ключ?

Наша стандартна поставка включає:

  • Вибір оптимального executor'а на основі профілю навантаження.
  • Реєстрацію runner'а та налаштування config.toml з правильними політиками pull, cache і security.
  • Налаштування кешу в S3 (MinIO, AWS S3, Yandex Object Storage) для прискорення наступних збірок — економія до 40% часу на повторних джобах.
  • Інтеграцію з cluster autoscaler та Karpenter для автоматичного масштабування.
  • RBAC-політики та NetworkPolicies для безпечної ізоляції.
  • Документацію з експлуатації та runbook для типових інцидентів.
  • Гарантію роботи конфігурації: якщо через місяць щось зламалося — виправимо безкоштовно.

Це рішення знижує витрати на CI-інфраструктуру на 30–50% на місяць у порівнянні з shared runners.

Типові проблеми при самостійному налаштуванні

Runner відвалюється після оновлення токена. З версії GitLab 16.0 токени стали формату glrt-. Старі runner'и з GR1348 перестають працювати — потрібна перереєстрація. Рішення: gitlab-runner verify && gitlab-runner register з новим токеном.

Кеш не працює між джобами. Шлях в cache.paths має бути відносним. Наприклад, для npm використовуйте - .npm/, а не абсолютний /app/node_modules. Інакше кеш не відновлюється.

Docker socket vs dind. Монтування /var/run/docker.sock дає джобі root-доступ до Docker на хості — це серйозна діра. Краще використовувати docker:dind як сервісний контейнер. Так, це сповільнює збірку на 10–20%, але безпека важливіша. GitLab офіційно рекомендує dind для ізольованих збірок.

Строки та вартість

Встановлення одного runner з Docker executor — 2–4 години, якщо вже є хост. Налаштування масштабованого рішення на Kubernetes з кешем в S3 та RBAC — від 1 до 3 днів. Вартість розраховується після аудиту вашого CI-навантаження — напишіть нам, і ми оцінимо проект за один робочий день. Ви отримуєте готову інфраструктуру під ключ з гарантією стабільної роботи. Замовте консультацію, і ми підготуємо індивідуальну пропозицію.

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

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

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1543
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1396
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1375
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    817
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1143