Gitlab Package Registry и Composer

15.07.2022 / development
Краткий обзор Gitlab Package Registry для приватных composer (PHP) пакетов, с примером использования, ссылки и скрины прилагаются 😎

Разрабатывая закрытое 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 запроса:

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

где:

Публиковать можно не только тег, но и ветку, для этого в запросе вместо tag=<tag> нужно указать branch=<branch>

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

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

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

где:

composer.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"
    }
}

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

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

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

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

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

Итог

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