Локальные раннеры (Self-hosted)
Info
Локальный (self-hosted) раннер — это приложение, которое вы развертываете и которым управляете самостоятельно. Такой раннер подключается к вашему экземпляру GitVerse и выполняет задачи workflow в контролируемой вами среде (на хосте или в контейнере).
Рекомендации
Self-hosted раннеры подходят, если вам нужно:
- запускать сборки и тесты в специфической инфраструктуре (например, со своими зависимостями, библиотеками, GPU и т. д.);
- работать с внутренними сетями кодовой базой физически или по соображениям безопасности недоступной из облака;
- выполнять долговременные задачи без ограничений по времени выполнения.
Режимы работы
В настоящее время self-hosted раннеры поддерживают два режима работы:
- запуск в Docker-контейнере;
- запуск непосредственно на хост-машине.
Рекомендуется запускать job’ы в контейнерах — это повышает изоляцию и воспроизводимость окружения.
Уровни привязки
Раннеры регистрируются/привязываются на одном из уровней:
- уровень репозитория — выполняет задачи только в рамках этого репозитория;
- уровень организации — выполняет задачи в рамках любого репозитория этой организации, см. организационный раннер.
Не запрещается иметь одновременно несколько раннеров на различных уровнях, задачи будут распределяться на первый освободившийся раннер в случайном порядке.
Скачивание, регистрация и настройка раннера
Info
Раннеры GitVerse доступны как нативные приложения под различные ОС и архитектуры, а также в виде Docker-образов.
Вы можете добавлять раннеры к репозиториям. Чтобы добавить локальный раннер к репозиторию, нужно быть владельцем репозитория.
-
В репозитории перейдите в Настройки → Раннеры.
-
В разделе Локальные раннеры нажмите Добавить раннер.
-
Выберите платформу и архитектуру машины, на которой будет использоваться раннер.
-
Скачайте актуальную версию раннера по кнопке Начать загрузку или из командной строки, следуя указаниям.
Все версии доступны в пакетах организации GitVerse
-
Зарегистрируйте и запустите раннер, последовательно выполнив дальнейшие рекомендации.
-
Проверьте, что в Настройки → Раннеры → Локальные раннеры появился раннер.
Регистрация и запуск раннера
Перед запуском раннера, его необходимо зарегистрировать на сервере GitVerse.
Регистрация позволяет раннеру понимать, откуда забирать задания, а серверу — корректно идентифицировать этот раннер.
Регистрация
Сделайте файл исполняемым:
chmod +x act_runnerЕсли раннер запускается из бинарника, зарегистрировать его можно командой:
./act_runner registerЕсли используется конфигурационный файл:
./act_runner --config config.yaml registerВо время регистрации система последовательно запросит:
-
uRL инстанса GitVerse, по умолчанию это https://gitverse.ru/sc;
-
токен регистрации раннера. Получить токен можно через интерфейс на странице регистрации раннера или через API;
-
имя раннера (необязательно). Если оставить пустым — будет использовано имя хоста;
-
метки раннера (необязательно). Если не указать — применяются значения по умолчанию.
Неинтерактивная регистрация
Для автоматизации можно передать параметры сразу:
./act_runner register \
--no-interactive \
--instance <URL инстанса GitVerse> \
--token <токен регистрации раннера> \
--name <имя раннера> \
--labels <метки раннера>Запуск раннера
После регистрации раннер можно запустить командой:
./act_runner daemonили с конфигурационным файлом:
./act_runner daemon --config config.yamlЕсли раннер запускается в docker-контейнере, регистрация и запуск выполняются так:
docker run \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $PWD/config.yaml:/config.yaml \
-e CONFIG_FILE=/config.yaml \
-e RUNNER_REGISTRATION_TOKEN=<registration_token> \
-e RUNNER_NAME=<runner_name> \
--name my_runner \
-d gitverse.ru/gitverse/act-runner:latestПосле запуска раннер:
- подключается к инстансу GitVerse;
- автоматически получает задания;
- выполняет их согласно настройкам.
Запуск раннеров в качестве службы Linux
- Создайте файл для службы
systemd:/etc/systemd/system/act_runner.serviceследующего содержания (нужно выполнять под пользователем, который состоит в группеsudo):
[Unit]
Description=My GitVerse runner
Documentation=https://gitverse.ru/docs/cicd/docs/runners/
After=docker.service
[Service]
ExecStart=/opt/act_runner/act_runner daemon --config /opt/act_runner/config.yaml
ExecReload=/bin/kill -s HUP $MAINPID
WorkingDirectory=/opt/act_runner
TimeoutSec=0
RestartSec=10
Restart=always
User=act_runner
[Install]
WantedBy=multi-user.target- Перезагрузите конфигурацию
systemd:
sudo systemctl daemon-reload- Добавьте автоматический запуск сервиса при загрузке:
sudo systemctl enable act_runner --nowМетки и среды выполнения
При регистрации self-hosted раннера ему автоматически присваиваются стандартные метки (labels).
Эти метки отражают операционную систему, аппаратную архитектуру раннера, а также влияют на режим, в котором выполняются задачи:
| Режим | Метка | Описание | Пример использования |
|---|---|---|---|
| Host | self-hosted, linux, windows, macos, x64, arm64 | Задачи выполняются на самом хосте, где установлен раннер. | runs-on: [self-hosted, linux, x64] |
| Docker | img-ubuntu-latest, img-ubuntu-22.04, img-ubuntu-20.04 | Раннер запускает задачу в контейнере с указанным образом. | runs-on: img-ubuntu-20.04 |
Создание своих меток
Метки, в том числе и по умолчанию, задаются списком значений, разделенных запятой. Стандартный набор меток для раннера под Linux выглядит так:
linux:host, x64:host, self-hosted:host,
img-ubuntu-latest:gitverse:gitverse/runner-image:ubuntu-latest, img-ubuntu-22.04:gitverse:gitverse/runner-image:ubuntu-22.04, img-ubuntu-20.04:gitverse:gitverse/runner-image:ubuntu-20.04Метка img-ubuntu-20.04:gitverse:gitverse/runner-image:ubuntu-20.04, где:
img-ubuntu-20.04— сама метка и указывается вruns-on: img-ubuntu-20.04;gitverse:gitverse/runner-image:ubuntu-20.04указывает окружение для выполнения задач в Docker-контейнере, созданном из образаgitverse/runner-image:ubuntu-20.04.
Метка self-hosted:host
self-hosted— сама метка и указывается вruns-on: self-hosted;hostуказывает, что каждая задача будет выполняться на самом хосте, где установлен раннер.
Суффикс
:hostне является обязательным, но рекомендуется использовать уникальные метки, например,linux_amd64:hostилиwindows:host, чтобы избежать неоднозначностей и ошибок при маршрутизации задач.
Отслеживание занятости раннеров
Вы можете отслеживать занятость раннеров прямо в интерфейсе GitVerse. В репозитории перейдите в Настройки → Раннеры. Вы увидите список всех раннеров.
Рядом с каждым раннером указан его текущий статус:
- идет сборка — раннер выполняет задачу;
- свободен — раннер свободен для новой задачи;
- недоступен — раннер зарегистрирован, но оффлайн.
Чтобы узнать больше о конкретном раннере, нажмите на его имя. Откроется страница с информацией о раннере и историей сборок. В истории сборок вы увидите основную информацию по задачам, а также время взятия в работу и продолжительность выполнения. При нажатии на название задачи вы перейдете в workflow, в котором выполнялась данная задача.
Расширенные возможности настройки
Раннер GitVerse позволяет гибко настраивать свою работу с помощью конфиг-файлов.
Сгенерировать конфигурационный файл можно так:
./act_runner generate-config > config.yamlИспользовать тоже достаточно просто:
./act_runner --config config.yaml [command]Пример полного конфиг-файла с описанием настраиваемых полей:
log:
# Уровень логирования - trace, debug, info, warn, error, fatal
level: info
runner:
# После регистрации раннера, в этом файле будут храниться основные настройки
file: .runner
# Максимальное количество одновременно выполняемых задач раннером
capacity: 1
# Переменные окружения, доступные во всех задачах
envs:
ENV_NAME_1: env_value_1
ENV_NAME_2: env_value_2
# Файл с переменными окружения
env_file: .env
# Максимальное время выполнения задачи
timeout: 1h
# Время ожидания завершения задач при остановке раннера
shutdown_timeout: 0s
# Отключение проверки TLS-сертификата
insecure: false
# Таймаут получения задач
fetch_timeout: 5s
# Интервал опроса очереди задач
fetch_interval: 2s
# Метки раннера (определяют, какие задачи он может выполнять)
labels:
- "macOS:host"
- "x64:host"
- "self-hosted:host"
- "img-ubuntu-latest:gitverse:gitverse/runner-image:ubuntu-latest"
cache:
# Включить поддержку actions/cache
enabled: true
# Каталог хранения кэша
dir: ""
# Адрес сервера кэша
host: ""
# Порт сервера кэша
port: 0
# Внешний сервер кэша
external_server: ""
container:
# Тип сети контейнеров
network: ""
# Запуск контейнеров в privileged-режиме
privileged: false
# Дополнительные параметры docker run
options:
# Базовый каталог рабочей директории
workdir_parent:
# Разрешенные тома для монтирования
valid_volumes: []
# Docker host
docker_host: ""
# Принудительно обновлять образы
force_pull: true
# Принудительно пересобирать образы
force_rebuild: false
host:
# Базовый каталог рабочей директории
workdir_parent: