Разрабатывая закрытое 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"
где:
personal-access-token
- персональный токен доступаproject_id
- идентификатор проектаtag
- ранее созданный тег git репозиторияПубликовать можно не только тег, но и ветку, для этого в запросе вместо
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>
где:
group_id
- идентификатор группы проектов, в котором размещается пакетDOMAIN-NAME
- имя домена с Gitlab
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 пакетов.