Что такое Runner в GitLab CI/CD?

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

Ответ

Runner в GitLab CI/CD — это изолированный агент (обычно установленный на отдельной машине, в контейнере или в Kubernetes-кластере), который выполняет задания (jobs), описанные в файле .gitlab-ci.yml.

Типы раннеров по области видимости:

  • Shared Runners: Общие раннеры, доступные для всех проектов на инстансе GitLab (управляются администратором).
  • Group Runners: Раннеры, зарегистрированные на уровне группы проектов.
  • Project Runners: Специфичные раннеры, привязанные к одному конкретному проекту (например, для требований к безопасности или специфичного железа).

Исполнители (Executors): Определяют среду, в которой запускается задание.

  • docker: Запускает каждое задание в отдельном контейнере Docker. Самый популярный и изолированный вариант.
  • kubernetes: Создаёт временные поды (Pods) в Kubernetes-кластере для выполнения заданий. Обеспечивает отличную масштабируемость.
  • shell: Выполняет команды напрямую на хосте, где установлен раннер. Требует осторожности из-за отсутствия изоляции.

Пример конфигурации задания с использованием Docker-раннера:

build_job:
  stage: build
  image: golang:1.21  # Контейнер, в котором будет запущено задание
  script:
    - go version
    - go build -o myapp ./cmd/
  tags:
    - docker  # Задание будет выполнено только на раннерах с этим тегом

Из моего опыта: В проектах мы настраивали автоскейлинг раннеров в Kubernetes с помощью проекта gitlab-runner. Это позволяло динамически создавать поды для заданий и автоматически их удалять после завершения, что значительно экономило ресурсы кластера по сравнению с постоянно работающими раннерами.