Какие типы раннеров (executors) существуют в CI/CD системах, таких как GitLab Runner?

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

Ответ

В контексте CI/CD, например в GitLab Runner, используются различные типы исполнителей (executors), которые определяют среду выполнения заданий (jobs). Основные типы:

  • Docker Executor: Запускает каждое задание в отдельном контейнере Docker. Это обеспечивает хорошую изоляцию и воспроизводимость, так как окружение определяется образом. Конфигурация проста и основана на Docker.
  • Kubernetes Executor: Запускает задания в виде подов (pods) внутри Kubernetes-кластера. Это позволяет динамически масштабировать раннеры и использовать мощь оркестратора для управления ресурсами.
  • Shell Executor: Выполняет команды задания напрямую в shell хоста, на котором установлен раннер. Нет изоляции, но максимальная производительность и прямой доступ к хосту. Используется для специфичных задач, требующих доступа к аппаратному обеспечению или особой конфигурации системы.
  • Docker Machine Executor (устаревший): Раньше использовался для автоматического создания временных виртуальных машин с Docker для изоляции. В современных облачных средах его заменяют Kubernetes или Docker-in-Docker подходы.
  • SSH Executor: Выполняет команды на удаленном хосте по SSH.

Пример конфигурации GitLab Runner с Docker Executor (config.toml):

[[runners]]
  name = "my-docker-runner"
  url = "https://gitlab.com"
  token = "__TOKEN__"
  executor = "docker"
  [runners.docker]
    image = "alpine:latest"
    volumes = ["/cache", "/var/run/docker.sock:/var/run/docker.sock"]

Выбор исполнителя зависит от требований к изоляции, масштабируемости, производительности и инфраструктуре.