Help us learn about your current experience with the documentation. Take the survey.

软件包 API

  • Tier: 免费版、高级版、旗舰版
  • Offering: GitLab.com、GitLab 自托管、GitLab 专用版

GitLab 软件包 的 API 文档。

列出软件包

对于项目

获取项目软件包列表。结果中包含所有软件包类型。未通过身份验证访问时,仅返回公共项目的软件包。默认情况下,返回状态为 defaultdeprecatederror 的软件包。使用 status 参数查看其他软件包。

GET /projects/:id/packages
属性 类型 必需 描述
id integer/string ID 或 项目的 URL 编码路径
order_by string 用作排序的字段。可选值为 created_at(默认)、nameversiontype
sort string 排序方向,升序为 asc(默认),降序为 desc
package_type string 按类型过滤返回的软件包。可选值为 composerconangenericgolanghelmmavennpmnugetpypiterraform_module
package_name string 按名称对项目软件包进行模糊搜索。
package_version string 按版本过滤项目软件包。如果与 include_versionless 一起使用,则不返回无版本软件包。在 GitLab 16.6 中引入
include_versionless boolean 设置为 true 时,响应中包含无版本软件包。
status string 按状态过滤返回的软件包。可选值为 defaulthiddenprocessingerrorpending_destructiondeprecated
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/:id/packages"

弃用:响应中的 pipelines 属性已弃用,推荐使用 列出软件包管道端点,该端点在 GitLab 16.0 中 引入。如果软件包没有任何管道,则响应中不包含 pipelines 属性。否则,pipelines 属性返回空数组。

示例响应:

[
  {
    "id": 1,
    "name": "com/mycompany/my-app",
    "version": "1.0-SNAPSHOT",
    "package_type": "maven",
    "created_at": "2019-11-27T03:37:38.711Z"
  },
  {
    "id": 2,
    "name": "@foo/bar",
    "version": "1.0.3",
    "package_type": "npm",
    "created_at": "2019-11-27T03:37:38.711Z"
  },
  {
    "id": 3,
    "name": "Hello/0.1@mycompany/stable",
    "conan_package_name": "Hello",
    "version": "0.1",
    "package_type": "conan",
    "_links": {
      "web_path": "/foo/bar/-/packages/3",
      "delete_api_path": "https://gitlab.example.com/api/v4/projects/1/packages/3"
    },
    "created_at": "2029-12-16T20:33:34.316Z",
    "tags": []
  }
]

默认情况下,GET 请求返回 20 个结果,因为 API 是 分页的

尽管可以按状态过滤软件包,但处理状态为 processing 的软件包可能会导致数据格式错误或软件包损坏。

对于组

获取组级别的项目软件包列表。 未通过身份验证访问时,仅返回公共项目的软件包。 默认情况下,返回状态为 defaultdeprecatederror 的软件包。使用 status 参数查看其他软件包。

GET /groups/:id/packages
属性 类型 必需 描述
id integer/string ID 或 组的 URL 编码路径
exclude_subgroups boolean 如果参数包含为 true,则不列出来自子组项目的软件包。默认为 false
order_by string 用作排序的字段。可选值为 created_at(默认)、nameversiontypeproject_path
sort string 排序方向,升序为 asc(默认),降序为 desc
package_type string 按类型过滤返回的软件包。可选值为 composerconangenericgolanghelmmavennpmnugetpypiterraform_module
package_name string 按名称对项目软件包进行模糊搜索。
package_version string 按版本过滤返回的软件包。如果与 include_versionless 一起使用,则不返回无版本软件包。在 GitLab 16.6 中引入
include_versionless boolean 设置为 true 时,响应中包含无版本软件包。
status string 按状态过滤返回的软件包。可选值为 defaulthiddenprocessingerrorpending_destructiondeprecated
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/:id/packages?exclude_subgroups=false"

弃用:响应中的 pipelines 属性已弃用,推荐使用 列出软件包管道端点,该端点在 GitLab 16.0 中 引入。如果软件包没有任何管道,则响应中不包含 pipelines 属性。否则,pipelines 属性返回空数组。

示例响应:

[
  {
    "id": 1,
    "name": "com/mycompany/my-app",
    "version": "1.0-SNAPSHOT",
    "package_type": "maven",
    "_links": {
      "web_path": "/namespace1/project1/-/packages/1",
      "delete_api_path": "/namespace1/project1/-/packages/1"
    },
    "created_at": "2019-11-27T03:37:38.711Z",
    "pipelines": [
      {
        "id": 123,
        "status": "pending",
        "ref": "new-pipeline",
        "sha": "a91957a858320c0e17f3a0eca7cfacbff50ea29a",
        "web_url": "https://example.com/foo/bar/pipelines/47",
        "created_at": "2016-08-11T11:28:34.085Z",
        "updated_at": "2016-08-11T11:32:35.169Z",
        "user": {
          "name": "管理员",
          "avatar_url": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon"
        }
      }
    ]
  },
  {
    "id": 2,
    "name": "@foo/bar",
    "version": "1.0.3",
    "package_type": "npm",
    "_links": {
      "web_path": "/namespace1/project1/-/packages/1",
      "delete_api_path": "/namespace1/project1/-/packages/1"
    },
    "created_at": "2019-11-27T03:37:38.711Z",
    "pipelines": [
      {
        "id": 123,
        "status": "pending",
        "ref": "new-pipeline",
        "sha": "a91957a858320c0e17f3a0eca7cfacbff50ea29a",
        "web_url": "https://example.com/foo/bar/pipelines/47",
        "created_at": "2016-08-11T11:28:34.085Z",
        "updated_at": "2016-08-11T11:32:35.169Z",
        "user": {
          "name": "管理员",
          "avatar_url": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon"
        }
      }
    ]
  }
]

默认情况下,GET 请求返回 20 个结果,因为 API 是 分页的

_links 对象包含以下属性:

  • web_path:您可以在 GitLab 中访问并查看软件包详细信息的路径。
  • delete_api_path:删除软件包的 API 路径。仅当请求用户有权限时可用。

尽管可以按状态过滤软件包,但处理状态为 processing 的软件包可能会导致数据格式错误或软件包损坏。

获取项目软件包

获取单个项目软件包。仅返回状态为 defaultdeprecated 的软件包。

GET /projects/:id/packages/:package_id
属性 类型 必需 描述
id integer/string ID 或 项目的 URL 编码路径
package_id integer 软件包的 ID。
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/:id/packages/:package_id"

弃用:响应中的 pipelines 属性已弃用,推荐使用 列出软件包管道端点,该端点在 GitLab 16.0 中 引入。如果软件包没有任何管道,则响应中不包含 pipelines 属性。否则,pipelines 属性返回空数组。

示例响应:

{
  "id": 1,
  "name": "com/mycompany/my-app",
  "version": "1.0-SNAPSHOT",
  "package_type": "maven",
  "_links": {
    "web_path": "/namespace1/project1/-/packages/1",
    "delete_api_path": "/namespace1/project1/-/packages/1"
  },
  "created_at": "2019-11-27T03:37:38.711Z",
  "last_downloaded_at": "2022-09-07T07:51:50.504Z",
  "pipelines": [
    {
      "id": 123,
      "status": "pending",
      "ref": "new-pipeline",
      "sha": "a91957a858320c0e17f3a0eca7cfacbff50ea29a",
      "web_url": "https://example.com/foo/bar/pipelines/47",
      "created_at": "2016-08-11T11:28:34.085Z",
      "updated_at": "2016-08-11T11:32:35.169Z",
      "user": {
        "name": "管理员",
        "avatar_url": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon"
      }
    }
  ],
  "versions": [
    {
      "id":2,
      "version":"2.0-SNAPSHOT",
      "created_at":"2020-04-28T04:42:11.573Z",
      "pipelines": [
        {
          "id": 234,
          "status": "pending",
          "ref": "new-pipeline",
          "sha": "a91957a858320c0e17f3a0eca7cfacbff50ea29a",
          "web_url": "https://example.com/foo/bar/pipelines/58",
          "created_at": "2016-08-11T11:28:34.085Z",
          "updated_at": "2016-08-11T11:32:35.169Z",
          "user": {
            "name": "管理员",
            "avatar_url": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon"
          }
        }
      ]
    }
  ]
}

_links 对象包含以下属性:

  • web_path:您可以在 GitLab 中访问并查看软件包详细信息的路径。仅当软件包状态为 defaultdeprecated 时可用。
  • delete_api_path:删除软件包的 API 路径。仅当请求用户有权限时可用。

列出软件包文件

获取单个软件包的文件列表。

GET /projects/:id/packages/:package_id/package_files
属性 类型 必需 描述
id integer/string ID 或 项目的 URL 编码路径
package_id integer 软件包的 ID。
order_by string 用作排序的字段。可选值为 id(默认)、file_namecreated_at
sort string 排序方向,升序为 asc(默认),降序为 desc
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/:id/packages/:package_id/package_files"

示例响应:

[
  {
    "id": 25,
    "package_id": 4,
    "created_at": "2018-11-07T15:25:52.199Z",
    "file_name": "my-app-1.5-20181107.152550-1.jar",
    "size": 2421,
    "file_md5": "58e6a45a629910c6ff99145a688971ac",
    "file_sha1": "ebd193463d3915d7e22219f52740056dfd26cbfe",
    "file_sha256": "a903393463d3915d7e22219f52740056dfd26cbfeff321b",
    "pipelines": [
      {
        "id": 123,
        "status": "pending",
        "ref": "new-pipeline",
        "sha": "a91957a858320c0e17f3a0eca7cfacbff50ea29a",
        "web_url": "https://example.com/foo/bar/pipelines/47",
        "created_at": "2016-08-11T11:28:34.085Z",
        "updated_at": "2016-08-11T11:32:35.169Z",
        "user": {
          "name": "管理员",
          "avatar_url": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon"
        }
      }
    ]
  },
  {
    "id": 26,
    "package_id": 4,
    "created_at": "2018-11-07T15:25:56.776Z",
    "file_name": "my-app-1.5-20181107.152550-1.pom",
    "size": 1122,
    "file_md5": "d90f11d851e17c5513586b4a7e98f1b2",
    "file_sha1": "9608d068fe88aff85781811a42f32d97feb440b5",
    "file_sha256": "2987d068fe88aff85781811a42f32d97feb4f092a399"
  },
  {
    "id": 27,
    "package_id": 4,
    "created_at": "2018-11-07T15:26:00.556Z",
    "file_name": "maven-metadata.xml",
    "size": 767,
    "file_md5": "6dfd0cce1203145a927fef5e3a1c650c",
    "file_sha1": "d25932de56052d320a8ac156f745ece73f6a8cd2",
    "file_sha256": "ac849d002e56052d320a8ac156f745ece73f6a8cd2f3e82"
  }
]

默认情况下,GET 请求返回 20 个结果,因为 API 是 分页的

列出软件包管道

获取单个软件包的管道列表。结果按 id 降序排序。

结果是 分页的,每页最多返回 20 条记录。

GET /projects/:id/packages/:package_id/pipelines
属性 类型 必需 描述
id integer/string ID 或 项目的 URL 编码路径
package_id integer 软件包的 ID。
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/:id/packages/:package_id/pipelines"

示例响应:

[
  {
    "id": 1,
    "iid": 1,
    "project_id": 9,
    "sha": "2b6127f6bb6f475c4e81afcc2251e3f941e554f9",
    "ref": "mytag",
    "status": "failed",
    "source": "push",
    "created_at": "2023-02-01T12:19:21.895Z",
    "updated_at": "2023-02-01T14:00:05.922Z",
    "web_url": "http://gdk.test:3001/feature-testing/composer-repository/-/pipelines/1",
    "user": {
      "id": 1,
      "username": "root",
      "name": "管理员",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80\u0026d=identicon",
      "web_url": "http://gdk.test:3001/root"
    }
  },
  {
    "id": 2,
    "iid": 2,
    "project_id": 9,
    "sha": "e564015ac6cb3d8617647802c875b27d392f72a6",
    "ref": "main",
    "status": "canceled",
    "source": "push",
    "created_at": "2023-02-01T12:23:23.694Z",
    "updated_at": "2023-02-01T12:26:28.635Z",
    "web_url": "http://gdk.test:3001/feature-testing/composer-repository/-/pipelines/2",
    "user": {
      "id": 1,
      "username": "root",
      "name": "管理员",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80\u0026d=identicon",
      "web_url": "http://gdk.test:3001/root"
    }
  }
]

删除项目软件包

删除项目软件包。

DELETE /projects/:id/packages/:package_id
属性 类型 必需 描述
id integer/string ID 或 项目的 URL 编码路径
package_id integer 软件包的 ID。
curl --request DELETE \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/:id/packages/:package_id"

可能返回以下状态码:

  • 204 No Content:软件包已成功删除。
  • 403 Forbidden:软件包受保护,无法删除。
  • 404 Not Found:未找到软件包。

如果启用了 请求转发,删除软件包可能会引入 依赖混淆风险

如果软件包受 保护规则 保护,则禁止删除该软件包。

删除软件包文件

删除软件包文件可能会损坏您的软件包,使其无法使用或无法从软件包管理器客户端拉取。删除软件包文件时,请确保您了解自己在做什么。

删除软件包文件:

DELETE /projects/:id/packages/:package_id/package_files/:package_file_id
属性 类型 必需 描述
id integer/string ID 或 项目的 URL 编码路径
package_id integer 软件包的 ID。
package_file_id integer 软件包文件的 ID。
curl --request DELETE \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/:id/packages/:package_id/package_files/:package_file_id"

可能返回以下状态码:

  • 204 No Content:软件包已成功删除。
  • 403 Forbidden:用户没有删除文件的权限,或者软件包受保护无法删除。
  • 404 Not Found:未找到软件包或软件包文件。

如果软件包文件所属的软件包受 保护规则 保护,则禁止删除该软件包文件。