Ответ
В контексте 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]
На практике мы настраиваем:
- Разделение раннеров: Autoscaling группы раннеров в Kubernetes для тяжёлых сборок и простые shell-раннеры для разовых скриптов.
- Кеширование: Настройку кеша (например, в S3) для ускорения последующих сборок.
- Безопасность: Запуск раннеров в изолированной сети с доступом только к необходимым ресурсам (артефакт-хранилища, приватные реестры).