Загрузка файла общего пакета GitLab с использованием токена развертывания

#continuous-integration #gitlab-ci

#непрерывная интеграция #gitlab-ci

Вопрос:

У меня есть проект (A) с конвейером CI в GitLab. Этот конвейер зависит от пакета из другого проекта (B). Во время сборки проекта A я хочу загрузить пакет из реестра пакетов проекта B. Пакеты загружаются в виде (zip-файлов) общих пакетов. Все проекты являются частными, поэтому мне нужен какой-то токен доступа для аутентификации.

Я пытаюсь использовать токены развертывания, поскольку они, похоже, обеспечивают требуемую область доступа read_package_registry. Однако я не могу найти никакой документации, описывающей, как проходить аутентификацию с помощью токена развертывания при загрузке файлов общего пакета.

Я использую следующий запрос, описанный в предыдущей ссылке.

 GET https://gitlab.com/api/v4/projects/<project_B_id>/packages/generic/<package_name>/<package_version>/<package_file>
  

Я пробовал

  • добавление имени пользователя и пароля токена развертывания к URL-адресу, базовая / дайджест-аутентификация
  • Добавление заголовка к запросу PRIVATE-TOKEN: [deploy-token]
  • Добавление заголовка к запросу DEPLOY-TOKEN: [deploy-token]
  • Добавление заголовка к запросу Authorization: Bearer [deploy-token]
  • Я также пробовал каждый из приведенных выше заголовков, но в [deploy-token-username][deploy-token] качестве значения

Я не могу найти документацию, в которой указано, что я не могу использовать токен развертывания.

У кого-нибудь есть рабочий пример того, как это сделать, или кто-нибудь знает, возможно ли это / невозможно?

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

Ответ №1:

Проблема была поднята в gitlab. Токены развертывания пока не работают. В настоящее время он отслеживается здесь:

https://gitlab.com/gitlab-org/gitlab/-/issues/284397

Обходным путем является использование личного токена доступа.

Ответ №2:

Это работает с Gitlab 13.0. Согласно документации, создайте токен развертывания и укажите имя пользователя и пароль в запросе. Это базовая аутентификация, и с помощью curl вы можете это сделать

 curl --user "<deploy-token-username>:<deploy-token>" 
     "https://gitlab.example.com/api/v4/projects/24/packages/generic/my_package/0.0.1/file.txt"
  

Похоже, что токены развертывания не работают с PRIVATE-TOKEN или Authorization заголовками с токеном на предъявителя.

Ответ №3:

Я тоже искал этот ответ.

Документы (https://docs.gitlab.com/ee/user/packages/generic_packages/index.html#authenticate-to-the-package-registry ) сказать

Для аутентификации в реестре пакетов вам нужен либо личный токен доступа, либо токен задания CI.

Никаких упоминаний о токенах развертывания. Похоже, они ограничены docker, npm и т. Д.

Кроме того, токен задания, который у вас есть в проекте B, позволяет публиковать ваш артефакт. Но токен задания, который у вас есть в проекте A, похоже, не авторизован для его загрузки.

Я считаю, что ответ заключается в том, что вы не можете использовать токен развертывания, но я бы хотел, чтобы оказалось, что это не так.