# GitHub Packages 简介

GitHub Packages 是一项软件包托管服务，可用于私下或公开托管软件包，并将包用作项目中的依赖项。

<!-- 2148AF7B-5FF8-4B28-A808-D692FEE2225A -->

## 关于 GitHub Packages

GitHub Packages 是用于托管和管理包的平台，包括容器和其他依赖项。
GitHub Packages 将源代码和包集中于一个平台，以提供集成的权限管理和，以便在GitHub 上集中进行软件开发。

可以将GitHub Packages与GitHub的API、GitHub Actions和Webhook集成，创建一个端到端的DevOps工作流，其中包含代码、CI和部署解决方案。

GitHub Packages 为常用包管理器提供不同的包注册表，例如 npm、RubyGems、Apache Maven、Gradle、Docker 和 NuGet。
有关支持的不同包注册表 GitHub Packages 的详细信息，请参阅 [使用 GitHub Packages 注册表](/zh/enterprise-server@3.22/packages/working-with-a-github-packages-registry)。

您可以在GitHub上查看包的自述文件以及元数据，例如许可、下载统计信息、版本历史记录等。 有关详细信息，请参阅“[查看包](/zh/enterprise-server@3.22/packages/learn-github-packages/viewing-packages)”。

有关在GitHub Packages上配置GitHub Enterprise Server的详细信息，请参阅 [企业 GitHub Packages 使用入门](/zh/enterprise-server@3.22/admin/configuring-packages/getting-started-with-github-packages-for-your-enterprise)。

### 包权限概述

可以从托管包的存储库继承包的权限，也可以为特定用户或组织定义该权限。 某些注册表仅支持从存储库继承的权限。 有关这些注册表的列表，请参阅 [关于 GitHub Packages 的权限](/zh/enterprise-server@3.22/packages/learn-github-packages/about-permissions-for-github-packages#permissions-for-repository-scoped-packages)。 有关包访问的详细信息，请参阅 [配置包的访问控制和可见性](/zh/enterprise-server@3.22/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility)。

### 包可见性概述

可以在公共存储库中发布包（公共包）以与企业中每个人共享，或者在专用存储库中发布包（专用包）以与协作者或组织共享。

## 支持的客户端和格式

<!-- If you make changes to this feature, check whether any of the changes affect languages listed in /get-started/learning-about-github/github-language-support. If so, please update the language support article accordingly. -->

GitHub Packages 使用您已经熟悉的本地包工具命令来发布和安装包版本。

### 对包注册表的支持

| 语言                                  | 说明                     | 包格式            | 软件包客户端   |
| ----------------------------------- | ---------------------- | -------------- | -------- |
| JavaScript                          | Node.js 包管理器           | `package.json` | `npm`    |
| Ruby                                | RubyGems 包管理器          | `Gemfile`      | `gem`    |
| Java                                | Apache Maven 项目管理和理解工具 | `pom.xml`      | `mvn`    |
| Java                                | Java 的 Gradle 自动化构建工具  |                |          |
| `build.gradle` 或 `build.gradle.kts` | `gradle`               |                |          |
| .NET                                | .NET 的 NuGet 包管理       | `nupkg`        |          |
| `dotnet` CLI（命令行界面）                 |                        |                |          |
| 空值                                  | Docker 容器管理平台          | `Dockerfile`   | `Docker` |

> \[!NOTE]
> 启用 Docker 注册表时，我们强烈建议还启用子域隔离。 有关详细信息，请参阅“[启用子域隔离](/zh/enterprise-server@3.22/admin/configuring-settings/hardening-security-for-your-enterprise/enabling-subdomain-isolation)”。

有关配置包客户端以供使用 GitHub Packages的详细信息，请参阅 [使用 GitHub Packages 注册表](/zh/enterprise-server@3.22/packages/working-with-a-github-packages-registry)。

## 正在对GitHub Packages进行身份验证

> \[!NOTE]
> GitHub Packages 仅支持使用 personal access token (classic) 进行身份验证。 有关详细信息，请参阅“[管理个人访问令牌](/zh/enterprise-server@3.22/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)”。

需要访问令牌才能发布、安装和删除专用、内部和公共包。

你可以使用 personal access token (classic) 向 GitHub Packages 或 GitHub API 进行身份验证。 创建 personal access token (classic) 时，可根据需要为令牌分配不同的作用域。 有关 personal access token (classic) 的包相关作用域的详细信息，请参阅 [关于 GitHub Packages 的权限](/zh/enterprise-server@3.22/packages/learn-github-packages/about-permissions-for-github-packages#about-scopes-and-permissions-for-package-registries)。

要在 GitHub Packages 工作流程内向 GitHub Actions 注册表验证，您可以使用：

* `GITHUB_TOKEN` 发布与工作流存储库相关联的包。
* 范围至少为 `read:packages` 的 personal access token (classic)，用于安装与其他专用存储库关联的包（如果向存储库授予对包的读取访问权限，可以使用 `GITHUB_TOKEN`。 请参阅 [配置包的访问控制和可见性](/zh/enterprise-server@3.22/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility)）。

有关在 `GITHUB_TOKEN` 工作流中使用的 GitHub Actions 的详细信息，请参阅 [在工作流中使用 GITHUB\_TOKEN 进行身份验证](/zh/enterprise-server@3.22/actions/tutorials/authenticate-with-github_token#using-the-github_token-in-a-workflow)。

## 管理软件包

可以在用户界面或使用 GitHub REST API 中删除包。 有关详细信息，请参阅 [删除和恢复包](/zh/enterprise-server@3.22/packages/learn-github-packages/deleting-and-restoring-a-package) 和 [适用于包的 REST API 终结点](/zh/enterprise-server@3.22/rest/packages)。 对于某些注册表，你可以使用 GraphQL 删除专用包的版本。

不能将 GitHub Packages GraphQL API 与支持精细权限的注册表配合使用。 有关仅支持仓库作用域权限且可与 GraphQL API 一起使用的注册表，请参阅 [关于 GitHub Packages 的权限](/zh/enterprise-server@3.22/packages/learn-github-packages/about-permissions-for-github-packages#permissions-for-repository-scoped-packages)\*\*\*\*。

使用 GraphQL API 查询和删除专用包时，必须使用用于进行身份验证的相同 personal access token (classic) 方法 GitHub Packages。

有关详细信息，请参阅 [删除和恢复包](/zh/enterprise-server@3.22/packages/learn-github-packages/deleting-and-restoring-a-package) 和 [使用 GraphQL 建立调用](/zh/enterprise-server@3.22/graphql/guides/forming-calls-with-graphql)。

您可以配置 web 挂钩来订阅与包相关的事件，例如包的发布或更新等事件。 有关详细信息，请参阅 [Webhook 事件和有效负载](/zh/enterprise-server@3.22/webhooks/webhook-events-and-payloads#package)。

## 联系支持部门

如果需要支持 GitHub Packages，请联系站点管理员。