Установка GitHub runner

Статья по установке и базовой настройке GitHub runner на ваш собственный сервер. Ничего сложного, но как всегда не без нюансов.

Телеграм-канал автора Егорыч поясняет за AI Помогаю кожаным и AI жить в любви и понимании — шутим, даём советы, рефлексируем. Подписаться

Установка GitHub runner

Добавить раннер можно на уровне репозитория, организации или предприятия (объединение нескольких организаций). В этой статье рассматривается первый вариант.

Предварительные требования

Разворачивать раннер я планирую на виртуальной машине с Ubuntu 20.04. Для его установки никаких специфических требований 1 нет, кроме уж совсем базового набора софта, доступа до ресурсов GitHub и др. Тем не менее потребуется Docker 2, если вы хотите запускать задачи внутри контейнеров.

Примечание: если хотите автоматизировать развертывание Docker, рекомендую использовать для этого Ansible. Например я пользуюсь ролью Ansible Role: Docker.

Также помните, что помимо самого раннера на хосте будут запускаться экшны, а это приложения Node.js. Базовое окружение они подтянут под себя сами, но например некоторый софт нужно будет установить отдельно.

Примечание: например gradle-build-action подтягивает архив нужной версии Грэдла, но при попытке распаковать его он упадет, если в системе не установлен unzip.

Вы можете максимально подогнать окружение своих раннеров под те, которые предоставляет GitHub, благо список софта 3 есть в официальной документации.

Установка

Актуальную инструкцию по установке вы всегда можете получить в настройках нужного репозитория — Settings / Actions / Runners / New self-hosted runner. Вот так это выглядит:

Установка GitHub runner 02

Выполнять команды нужно под пользователем, имеющим полные привилегии sudo.

Примечание: при запуске под рутом скрипт ругнется. Если вас не смущает выполнение установки под суперпользователем, то просто задайте переменную окружения  — RUNNER_ALLOW_RUNASROOT=1.

Скрипт задаст несколько вопросов в интерактивном режиме. Вы можете заранее на них ответить, передав соответствующие параметры скрипту. В итоге команда может выглядеть следующим образом:

У скрипта также есть справка:

При запуске ./run.sh сервис запустится прямо из консоли, а в списке раннеров появится только что добавленный. Если отправите SIGTERM (Ctrl+C), сервис остановится. Чтобы заставить его работать как службу, читайте следующую главу.

Автозапуск

Для меня загадка почему это не сделать сразу через скрипт начальной настройки, но разработчики почему-то выделили процесс создания systemd-юнита в отдельный гайд 4. Все упирается в пару команд:

Будет создан и активирован systemd-юнит:

Кастомизируйте юнит на свое усмотрение, если вдруг это необходимо.

Удаление

Для корректного удаления мало просто остановить systemd-юнит, нужно найти раннер также на GitHub и нажать Remove:

Установка GitHub runner 03

Копируйте команду и выполняйте на раннере. После этого он будет удален.

Яндекс.Метрика