Что такое воркер (runner) в GitLab CI/CD?

«Что такое воркер (runner) в GitLab CI/CD?» — вопрос из категории CI/CD, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В контексте GitLab CI/CD, воркер (чаще называемый runner) — это отдельный процесс или сервис (gitlab-runner), который подключается к GitLab-инстансу, забирает задания (jobs) из пайплайнов и выполняет их в изолированном окружении. Один инстанс gitlab-runner может запускать несколько заданий параллельно, каждое в своём воркере.

Ключевые концепции:

  • Исполнитель (Executor): Определяет, как запускается задание. Например, docker, kubernetes, shell, virtualbox. Для каждого задания создаётся новая среда.
  • Тэги (Tags): Позволяют направлять определённые задания (например, требующие GPU) на конкретных раннеров с соответствующими тэгами.
  • Ограничение параллелизма (concurrent): Параметр в config.toml, который ограничивает, сколько заданий может выполняться одновременно на одном инстансе раннера.

Пример конфигурации config.toml для Docker-раннера:

concurrent = 4 # Максимум 4 параллельных job (воркера) на этом инстансе
check_interval = 0

[[runners]]
  name = "docker-shared-runner"
  url = "https://gitlab.example.com"
  token = "PROJECT_REGISTRATION_TOKEN"
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "alpine:latest"
    privileged = false
    disable_cache = false
    volumes = ["/cache"]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]

На практике мы настраиваем:

  1. Разделение раннеров: Autoscaling группы раннеров в Kubernetes для тяжёлых сборок и простые shell-раннеры для разовых скриптов.
  2. Кеширование: Настройку кеша (например, в S3) для ускорения последующих сборок.
  3. Безопасность: Запуск раннеров в изолированной сети с доступом только к необходимым ресурсам (артефакт-хранилища, приватные реестры).