Как использовать Podman в GitLab Runners
Существует несколько способов разогнать бегунов GitLab с помощью Podman, два из которых я описал в этой статье.
GitLab Runner — это приложение, которое работает с GitLab CI/CD для запуска заданий в конвейере в инфраструктуре GitLab. Они часто используются для автоматической компиляции приложений после фиксации кода или для запуска тестов на базе кода. Вы можете думать о них как об облачных перехватчиках Git.
Основной общедоступный экземпляр GitLab предоставляет множество легкодоступных общих исполнителей, готовых к использованию в вашем конвейере CI. Список общих бегунов можно найти в Настройки -> CI/CD -> Раннеры вашего репозитория на GitLab.
(Локеш Мандвекар, CC BY-SA 4.0)
Есть много причин, по которым вы, возможно, не захотите зависеть от общих бегунов и вместо этого поддержите своих собственных бегунов. Например, контроль над инфраструктурой, в которой работают бегуны, для дополнительной безопасности и/или конфиденциальности, гибкая настройка бегуна или ограниченное количество минут CI, выделенных для вашей учетной записи пользователя GitLab.
Исполнители GitLab зависят от инструмента-исполнителя для запуска заданий CI. Для исполнителей доступно множество вариантов: Docker, Kubernetes, VirtualBox и так далее.
А что насчет Подмана как исполнителя?
Начиная с версии 4.2.0, Podman имеет встроенную поддержку средств запуска GitLab. Вот краткий обзор двух подходов к использованию Podman в качестве исполнителя для исполнителей GitLab.
Докер-исполнитель
Вы можете использовать Podman в качестве замены Docker в вашем GitLab Runner. Вот как:
В этом примере использовалась среда CentOS Stream 9 в феврале 2023 года с использованием Podman v4.4.0. Он должен работать так же хорошо в любой среде RHEL/CentOS Stream/Fedora с достаточно новым Podman. Предварительные требования см. в документации GitLab.
Сначала установите Podman:
$ sudo dnf -y install podman
Установите пакет gitlab-runner следующим образом:
# Add the GitLab runner repository
$ curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh" | sudo bash
# Install the gitlab-runner package
$ sudo dnf -y install gitlab-runner
Наконец, разрешите пользователю выполнять задачи после выхода из системы:
$ sudo loginctl enable-linger gitlab-runner
Настроить и зарегистрировать бегун
Используйте следующие шаги для настройки исполнителя Docker.
При установке пакета gitlab-runner создается учетная запись пользователя gitlab-runner, но для управления учетной записью пользователя необходим root-доступ. gitlab-runner можно запускать в пользовательском режиме, но для обработки сборки требуется некоторое ручное вмешательство. В этом примере я запускаю его в системном режиме с помощью sudo
. Вот как это выглядит:
$ sudo gitlab-runner register
Runtime platform arch=amd64 os=linux pid=7978 revision=d540b510 version=15.9.1
Running in system-mode.
Enter the GitLab instance URL (for example, https://gitlab.com/):
https://gitlab.com
Enter the registration token:
xxxxxxxxxxxxxxxxx
Enter a description for the runner:
[lmandvek-c9s-gitlab-runner]:
Enter tags for the runner (comma-separated):
Enter optional maintenance note for the runner:
WARNING: Support for registration tokens and runner parameters in the 'register' command has been deprecated in GitLab Runner 15.6 and will be replaced with support for authentication tokens. For more information, see https://gitlab.com/gitlab-org/gitlab/-/issues/380872
Registering runner... succeeded runner=GR13489419oEPYcJ8
Enter an executor: custom, docker, ssh, docker-ssh+machine, docker-ssh, parallels, shell, virtualbox, docker+machine, instance, kubernetes:
docker
Enter the default Docker image (for example, ruby:2.7):
registry.gitlab.com/rhcontainerbot/pkg-builder
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
Configuration (with the authentication token) was saved in "/etc/gitlab-runner/config.toml"
Для использования Podman вам потребуется дополнительная настройка. Настройте бегун для создания сети для каждого задания. Дополнительную информацию смотрите в документации GitLab.
Сначала включите системную службу Podman вместе с изменением Env в /etc/gitlab-runner/config.toml
:
[[runners]]
environment = ["FF_NETWORK_PER_BUILD=1"]
[runners.docker]
host = "unix:///run/user/1001/podman/podman.sock"
Перезапустите бегун, чтобы изменения вступили в силу:
$ sudo gitlab-runner restart
Убедитесь, что новый бегун отображается в Настройки вашего проекта GitLab -> CI/CD -> Раннеры:
(Локеш Мандвекар, CC BY-SA 4.0)
Затем убедитесь, что ваши конвейеры CI используют бегун. В журналах задач CI будет указано имя используемого бегуна, а также любая дополнительная информация о конфигурации, такая как флаги функций и образ контейнера, используемый с исполнителем бегуна.
(Локеш Мандвекар, CC BY-SA 4.0)
Подман-в-Подмане (pipglr)
Крис Эвич создал pipglr, установку Podman-in-Podman, позволяющую поддерживать ваши собственные GitLab Runners без root с помощью Podman без root. Этот подход не требует каких-либо изменений в вашей конфигурации .gitlab-ci.yaml
, поэтому вы можете продолжать использовать существующую настройку как есть.
Ниже приводится краткое руководство по настройке, которое поможет вам запустить эту систему.
Шаги настройки
Образ контейнера создается автоматически из файла-контейнера pipglr, поэтому установите образ в этот репозиторий:
$ IMAGE="registry.gitlab.com/qontainers/pipglr:latest"
Затем создайте секрет Podman, используя свой регистрационный токен GitLab:
$ echo '<actual registration token>' | podman secret create REGISTRATION_TOKEN -
Создайте пустой config.toml
, который позже будет содержать все ваши настройки бегуна. Вы должны выполнить этот шаг для успешного выполнения следующего шага podman Container Register Runlabel $IMAGE
:
$ touch ./config.toml # important: file must exist, even if empty.
Зарегистрируйте своего бегуна. Вы можете повторить этот шаг, чтобы зарегистрировать нескольких участников. Это полезно, если вы хотите параллельно запускать несколько задач CI с разными наборами тегов или параметров конфигурации.
$ podman container runlabel register $IMAGE
Отредактируйте config.toml
, используя выбранный вами редактор. Редактирование не является обязательным, но часто необходимо для изменения образа контейнера, используемого для реальной задачи CI. По умолчанию для образа установлено значение: registry.fedoraproject.org/fedora:latest.
$ $EDITOR ./config.toml # if desired
Наконец, настройте доступ к томам. Внутри томов контейнера используется несколько пользователей, поэтому необходимо специально настроить их для разрешения доступа. Runlabels снова придет на помощь:
$ podman container runlabel setupstorage $IMAGE
$ podman container runlabel setupcache $IMAGE
Проверьте бегун
Пришло время проверить конфигурации. Начните с запуска контейнера GitLab Runner:
$ podman container runlabel run $IMAGE
Разрешить пользователю-бегуну запускать службы после выхода из системы:
$ sudo loginctl enable-linger $(id -u)
Убедитесь, что ваш новый бегун отображается в Настройки вашего проекта GitLab -> CI/CD -> Раннеры:
(Локеш Мандвекар, CC BY-SA 4.0)
Наконец, убедитесь, что ваши конвейеры CI используют ваш бегун:
(Локеш Мандвекар, CC BY-SA 4.0)
Заворачивать
Существует несколько способов разогнать бегунов GitLab с помощью Podman, два из которых я описал здесь. Попробуйте их и дайте мне знать, какой из них подойдет вам лучше всего. В случае каких-либо проблем с подходом Docker-исполнителя, войдите в систему, чтобы сообщить о проблеме в исходную версию Podman или в службу поддержки GitLab. В случае возникновения проблем с методом pipglr, сообщите о проблеме в pipglr upstream.
Удачной работы GitLab с Podman 🙂