Disputa
Студенту

Свой раннер CI

Как подключить к репозиторию команды свой раннер, чтобы CI сам выкатывал работу на ваш сервер.

Тесты и сборка идут на общих раннерах хостинга: GitHub Actions или раннерах GitLab. А чтобы CI сам выкатывал работу на ваш сервер — стенд, VDS или ноутбук, — на этом сервере нужен свой раннер: он берёт задачи из репозитория и выполняет их у вас.

Зарегистрировать раннер в репозитории может только администратор (на GitHub) или Maintainer (на GitLab). Команде таких прав не дают: с ними можно снять защиту ветки main. Поэтому токен регистрации выдаёт платформа, а раннер вы ставите сами.

Где взять команду

В меню «Репозиторий» — «Свой раннер CI» → «Получить команду». Там же доступ к репозиторию и адрес стенда. Кнопка появляется, если организатор включил свой раннер для вашего потока, вы приняли приглашение в репозиторий и курс живёт на GitHub или GitLab: на GitVerse и SourceCraft свой раннер через платформу пока не подключить.

GitHub. Платформа покажет команды для Linux x64: скачать раннер, зарегистрировать его с меткой stand и запустить службой. Токен живёт час — регистрируйте сразу. Для другой системы возьмите архив со страницы выпусков раннера, остальное то же.

GitLab. Сначала поставьте gitlab-runner из пакетов, затем выполните команду gitlab-runner register, которую покажет платформа.

Токен GitLab показывается один раз

Каждая выдача заводит в проекте новый раннер. Те, что так и не вышли на связь, платформа убирает сама при следующей выдаче — лишние кнопки мусора не оставят.

Как отправить задачу на свой раннер

Раннер зарегистрирован с меткой stand. Задача с этой меткой пойдёт только на него, остальные — на общие раннеры.

GitHub Actions:

deploy:
  runs-on: [self-hosted, stand]
  steps:
    - uses: actions/checkout@v4
    - run: docker compose up -d --build

GitLab CI:

deploy:
  tags: [stand]
  script:
    - docker compose up -d --build

На GitLab раннер берёт и задачи без меток: у GitLab вуза общих раннеров может не быть, и тогда всё пойдёт на ваш.

Раннер GitLab работает от пользователя gitlab-runner. Если деплой через Docker, дайте ему доступ: sudo usermod -aG docker gitlab-runner.

Если сервер выключен

Пока раннер не на связи, задачи для него ждут. GitHub снимает задачу, если её никто не взял за сутки; GitLab держит её в ожидании. Включили сервер — раннер заберёт то, что успело дождаться.

На этой странице