Какие виды раннеров (runners) существуют в GitLab CI/CD?

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

Ответ

В GitLab CI/CD раннеры классифицируются по области видимости и исполнителю (executor).

По области видимости:

  1. Shared Runners (Общие): Раннеры, доступные для всех проектов в инстансе GitLab. Обычно управляются администраторами.
  2. Group Runners (Групповые): Раннеры, доступные всем проектам внутри определенной группы.
  3. Project Runners (Проектные): Раннеры, закрепленные за конкретным проектом.

По исполнителю (способу выполнения jobs):

  • Shell: Запускает job в shell (bash, PowerShell) на машине, где установлен раннер.
  • Docker: Запускает каждый job в отдельном Docker-контейнере. Это наиболее популярный и изолированный вариант.
  • Kubernetes: Запускает job внутри Pod'а в Kubernetes-кластере.
  • Docker Machine + autoscaling: Позволяет автоматически масштабировать раннеры на облачных инстансах (например, AWS EC2).
  • SSH, VirtualBox, Parallels: Для специфических сценариев.

Теги (tags) используются для направления jobs на определенные раннеры. Например, job с тегом aws будет выполнен только на раннере, которому присвоен этот тег.

# .gitlab-ci.yml
deploy_to_prod:
  stage: deploy
  tags:
    - shell  # Будет запущен на раннере с executor=shell
    - aws    # и тегом 'aws'
  script:
    - ./deploy.sh