Как зарегистрировать runner в GitLab?

Ответ

Регистрация GitLab Runner — это стандартная задача при настройке CI/CD пайплайнов. Вот пошаговый процесс, который я использую:

1. Установка GitLab Runner:

# Для Ubuntu/Debian
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash
sudo apt-get install gitlab-runner

# Для RHEL/CentOS/Fedora
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh" | sudo bash
sudo yum install gitlab-runner

2. Регистрация Runner:

sudo gitlab-runner register

Во время интерактивной регистрации нужно указать:

  • URL GitLab instance: https://gitlab.com (для SaaS) или адрес вашего self-hosted GitLab.
  • Registration token: Находится в Settings -> CI/CD -> Runners в разделе "Set up a specific Runner manually". Для групповых или проектных раннеров токены находятся в соответствующих разделах.
  • Description: Например, docker-runner-for-backend.
  • Tags (опционально): Теги для выбора раннера в .gitlab-ci.yml, например docker, linux, x86.
  • Executor: Выбираю в зависимости от среды:
    • docker — для изоляции в контейнерах (использую чаще всего).
    • kubernetes — для запуска в K8s кластере.
    • shell — для прямого выполнения на хосте.

3. Пример конфигурации для Docker executor (/etc/gitlab-runner/config.toml):

concurrent = 4
check_interval = 0

[[runners]]
  name = "production-docker-runner"
  url = "https://gitlab.com"
  token = "glrt-xxxxxxxxxxxxxxxx"
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "alpine:latest"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache", "/var/run/docker.sock:/var/run/docker.sock"]
    shm_size = 0
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]

4. Практический пример из production: Для регистрации раннера в Kubernetes кластере использовал Helm chart:

helm upgrade --install gitlab-runner gitlab/gitlab-runner 
  --namespace gitlab-runner 
  --set "gitlabUrl=https://gitlab.example.com" 
  --set "runnerRegistrationToken=GR1348941nBhuynDxmJCMttrsTox" 
  --set "rbac.create=true" 
  --set "runners.tags=kubernetes,production"

После регистрации раннер появляется в интерфейсе GitLab и готов выполнять jobs. В .gitlab-ci.yml можно указать теги для выбора конкретного раннера:

build:
  stage: build
  tags:
    - docker
    - linux
  script:
    - docker build -t app:latest .

Ответ 18+ 🔞

А, ну это же про регистрацию раннера в GitLab! Давай разберем, тут всё просто, как три копейки, если не накосячить на ровном месте.

1. Ставим самого бегуна (GitLab Runner): Тут всё зависит от того, на какой системе сидишь. Команды стандартные, главное — не перепутать, а то потом будешь сидеть и думать, какого хуя ничего не работает.

# Если у тебя Ubuntu или что-то подобное (Debian)
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash
sudo apt-get install gitlab-runner

# А если RHEL, CentOS или Fedora — тогда вот так
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh" | sudo bash
sudo yum install gitlab-runner

Поставил? Отлично. Теперь самое интересное — заставить эту штуку работать на нас.

2. Регистрируем этого товарища: Тут уже начинается магия. Запускаешь команду регистрации, и она тебя по пунктам проведёт.

sudo gitlab-runner register

Тебе начнут задавать вопросы, как на допросе. Отвечай честно.

  • URL GitLab instance: Если используешь облачный GitLab.com — так и пиши https://gitlab.com. Если свой, локальный — его адрес.
  • Registration token: Вот это, бля, важный момент! Токен надо брать прямо из интерфейса GitLab. Идёшь в Settings -> CI/CD -> Runners, ищешь там раздел "Set up a specific Runner manually" — вот там он и лежит, этот самый ключ. Для групповых или проектных раннеров токены свои, в соответствующих местах. Не перепутай, а то будет тебе ебать-копать, пока разберёшься.
  • Description: Ну тут понятно, назови его как душе угодно. Типа docker-runner-for-backend.
  • Tags (опционально): Это такие метки, чтобы потом в пайплайне указывать, на каком именно раннере запускать job. Например, docker, linux, x86. Удобная штука, если раннеров овердохуища.
  • Executor: А вот тут надо подумать. Выбираешь среду исполнения.
    • docker — классика, изоляция в контейнерах. Я его чаще всего юзаю, надёжно.
    • kubernetes — если хочешь запускать джобы прямо в K8s кластере. Для продвинутых.
    • shell — самый простой, но и самый опасный. Скрипты выполняются прямо на хосте, так что доверия ебать ноль, если не уверен в безопасности.

3. Глянем на конфиг (обычно /etc/gitlab-runner/config.toml): После регистрации там появится запись. Выглядит примерно так, можешь под себя подкрутить:

concurrent = 4
check_interval = 0

[[runners]]
  name = "production-docker-runner"
  url = "https://gitlab.com"
  token = "glrt-xxxxxxxxxxxxxxxx"
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "alpine:latest"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache", "/var/run/docker.sock:/var/run/docker.sock"]
    shm_size = 0
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]

4. Практический пример из боевых условий: Однажды пришлось регистрировать раннер прямо в Kubernetes. Сделал это через Helm chart, и всё взлетело с первого раза, что было удивление пиздец.

helm upgrade --install gitlab-runner gitlab/gitlab-runner 
  --namespace gitlab-runner 
  --set "gitlabUrl=https://gitlab.example.com" 
  --set "runnerRegistrationToken=GR1348941nBhuynDxmJCMttrsTox" 
  --set "rbac.create=true" 
  --set "runners.tags=kubernetes,production"

После всех этих телодвижений твой раннер должен появиться в списке в GitLab. Всё, он готов пахать. Чтобы заставить его выполнять конкретную работу, в твоём .gitlab-ci.yml просто укажи нужные теги:

build:
  stage: build
  tags:
    - docker
    - linux
  script:
    - docker build -t app:latest .

Вот и вся наука. Главное — токен правильно взять и executor не промахнуться, а дальше уже дело техники.