📥 Gitlab Package Registry и Composer

15.07.2022

Разрабатывая закрытое REST API по рабочему проекту, необходимо было написать SDK. В обоих случаях реализация на PHP, при этом SDK распространяемый composer пакет внутри компании, он должен быть таким же приватным как и сама реализация.

Недавно мы начали использовать Container Registry входящий в состав Gitlab, понравилось, было решено попробовать Package Registry для пакетов composer.

Есть документация Gitlab про реестр пакетов, а есть конкретный мануал по размещению и использованию composer пакетов.

Работать с Package Registry просто и понятно. Кратко рассмотрим этапы работы.

Начало работы

Создаем репозиторий composer пакета в Gitlab с composer.json внутри. Репозиторий должен находится в группе проектов, а размещаться будет непосредственно в проекте репозитория.

Затем необходимо создать тег в репозитории назвав его версией указанной в composer.json в соответсвии со спецификацией Compsoer.

Список всех пакетов группы будет доступен в разделе Packages & Registries > Package Registry.

Список пакетов группы проектов
Список пакетов группы проектов

Публикация пакета

Публиковать пакет можно по приватному или деплой токену, по этим же данным можно его получать как composer зависимость. Я выбрал приватный. Публикация происходит путем отправки http запроса:

•••
bash
curl --data tag=<tag> "https://__token__:<personal-access-token>@gitlab.example.com/api/v4/projects/<project_id>/packages/composer"

где:

  • personal-access-token - персональный токен доступа
  • project_id - идентификатор проекта
  • tag - ранее созданный тег git репозитория
Публиковать можно не только тег, но и ветку, для этого в запросе вместо tab=<tag> нужно указать branch=<branch>

Установка пакета

Формируем config.json через командную строку composer:

•••
bash
composer config repositories.<group_id> composer https://gitlab.example.com/api/v4/group/<group_id>/-/packages/composer/ composer config gitlab-domains <DOMAIN-NAME>

где:

  • group_id - идентификатор группы проектов, в котором размещается пакет
  • DOMAIN-NAME - имя домена с Gitlab
composer.json будет создан (или дополнен, если уже существовал) с данными "откуда брать пакеты". Пример:
•••
json
{ "repositories": [{ "type": "composer", "url": "https://my-gitlab.ru/api/v4/group/106/-/packages/composer/" }], "config": { "gitlab-domains": ["my-gitlab.ru"] }, "require": { "mygroup/mypackeage": "dev-main" } }

Так как у нас закрытая группа (и проект), то необходимо указать персональный токен доступа:

•••
bash
composer config gitlab-token.<DOMAIN-NAME> <personal_access_token>

Будет создан файл auth.json с токеном доступа на указанный инстанс Gitlab:

•••
json
{ "gitlab-token": { "my-gitlab.ru": "glp8t-48Sh68Dtw7nwer3Em" } }

auth.json необходимо поместить в .gitignore чтобы авторизационные данные не попали в репозиторий. Если необходимо пробрасывать данные в Gitlab можно воспользоваться переменными CI/CD.

Итог

Как видно ничего сложного и вполне удобно. Если использовать Gitlab, то нет необходимости прибегать к иным средствам распространения приватных composer пакетов.