Ответ
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. Это позволяло динамически создавать поды для заданий и автоматически их удалять после завершения, что значительно экономило ресурсы кластера по сравнению с постоянно работающими раннерами.