读取GitLab仓库中的包列表
我可以按以下方式推送一个包:
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/packagesLists 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能力的令牌来替代它(personal、project、或 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通用包仓库”了解该工作流程。