读取GitLab仓库中的包列表

后端开发 2026-07-12

我可以按以下方式推送一个包:

curl --location --header "DEPLOY-TOKEN: xxxx" --upload-file TestFile_1.0.0.0.pkg "https://xxxx/api/v4/projects/1234/packages/generic/TestFile/1.0.0.0/TestFile_1.0.0.0.pkg"

该文件会出现在GitLab项目仓库中。

我现在想列出包注册表中的所有文件,根据文档应该是下面这样:

curl --header "DEPLOY-TOKEN: xxxx" "https://xxxx/api/v4/projects/1234/packages"

但这只给我一个“404项目未找到”错误。我原本希望能返回一个包含包注册表中文件信息的JSON。

这是怎么回事?我到底错过了什么?

解决方案

I now want to list all the files in the package repository, which according to the documentation

我猜所谓“根据文档”,你指的是REST API / Resources / Package registry/ Package API

GET /projects/:id/packages

Lists all packages for a specified project. All package types are included in results. When accessed without authentication, only packages of public projects are returned.

然而,你使用的上传URL是形式为 .../packages/generic/.... 的包注册表端点,对于该端点可以使用 deploy tokens

部署令牌不能用于GitLab公共API。
但是,你可以在某些端点上使用部署令牌,例如来自包注册表的端点。
你可以通过URL包含的字符串 packages/<format> 判断一个端点属于包注册表。

关于GitLab API,"GitLab令牌总览" 的文档很清楚:

部署令牌允许你在没有用户和密码的情况下克隆、推送和拉取项目的包以及容器注册表镜像。
部署令牌不能用于GitLab API。

因此…… 404(表示 "404 Project Not Found"):你的部署令牌认证不能在一个 GitLab REST API 端点上工作。

你需要一个具备API能力的令牌来替代它(personalproject、或 group 访问令牌,或者在某些情况下在受支持的端点上使用CI作业令牌):请参见 “REST API身份验证”。

要使用 列出包文件 端点,请先获取 它的 package_id,然后再列出其文件:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
     --url "https://gitlab.example.com/api/v4/projects/:id/packages?package_type=generic&package_name=<name>&package_version=<version>"

curl --header "PRIVATE-TOKEN: <your_access_token>" \
     --url "https://gitlab.example.com/api/v4/projects/:id/packages/<package_id>/package_files"

请参阅“GitLab通用包仓库”了解该工作流程。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章