关于 GitHub Packages
GitHub Packages 是一种包托管服务,与 GitHub 完全集成。 GitHub Packages 将您的源代码和包组合在一起,以提供集成的权限管理和计费,使您能够在 GitHub 上专注于软件开发。
您可以将 GitHub Packages 与 GitHub API、GitHub Actions 以及 web 挂钩集成在一起,以创建端到端的 DevOps 工作流程,其中包括您的代码、CI 和部署解决方案。
您可以在一个仓库中托管多个包,并通过查看包的自述文件、下载统计、版本历史等,了解每个包的更多信息。
创建 GitHub Actions 工作流程时,您可以使用 GITHUB_TOKEN 发布和安装 GitHub Packages 中的包,无需存储和管理个人访问令牌。 更多信息请参阅“关于 GitHub Container Registry”。
注:GitHub Container Registry 目前处于公测阶段,可能会更改。 目前,GitHub Container Registry 只支持 Docker 映像格式。 在测试阶段,存储和带宽是免费的。 更多信息请参阅“关于 GitHub Container Registry”。
查看包
您可以在 GitHub 上查看软件包的 README、一些元数据(如许可)、下载统计、版本历史记录等。 更多信息请参阅“查看包”。
关于包权限和可见性
| 包注册表 | GitHub Container Registry | |
|---|---|---|
| 托管位置 | 您可以在一个仓库中托管多个包。 | 您可以在一个组织或用户帐户中托管多个容器映像。 |
| 权限 | You can publish packages in a public repository (public packages) to share with {% if currentVersion == "free-pro-team@latest" %}all of {% data variables.product.prodname_dotcom %}{% else %}everyone on your instance{% endif %}, or in a private repository (private packages) to share with collaborators or an organization. 您可以使用 GitHub 角色和团队来限制谁可以安装或发布每个包,因为包会继承仓库的权限。 对仓库有读取权限的任何人都可以将包安装为项目中的依赖项,有写入权限的任何人都可以发布新的包版本。 | 对于每个容器映像,您可以选择其他人具有的访问权限级别。 容器映像访问的权限与组织和仓库权限不同。 |
| 可见性 | You can publish packages in a public repository (public packages) to share with all of GitHub, or in a private repository (private packages) to share with collaborators or an organization. | 您可以设置每个容器映像的可见性。 私有容器映像仅对组织内被授予访问权限的人员或团队可见。 公共容器映像对任何人都可见。 |
有关 GitHub Container Registry 权限和可见性的更多信息,请参阅“配置容器的访问控制和可见性”。
关于 GitHub Packages 的计费
公共包免费使用 GitHub Packages。 对于私有包,每个 GitHub 帐户可获得一定数量的免费存储和数据传输,具体取决于帐户所使用的产品。 默认情况下,您的帐户支出限额为 0 美元,这将防止您在达到包含的限额后额外使用存储或数据传输。 如果您的支出限额高于默认的 0 美元,您将会收到额外存储或数据传输的帐单,也称为超限费用,最高可达到您的支出限额。 您帐户中的任何优惠券都不适用于 GitHub Packages 超额费用。 更多信息请参阅“关于 GitHub Packages 的计费”。
容器映像存储的计费更新: 在 GitHub Container Registry 的测试版阶段,Docker 映像存储和带宽对旧 docker.pkg.github.com 和新 ghcr.io 服务是免费的。 更多信息请参阅“关于 GitHub Container Registry”。
支持的客户端和格式
GitHub Packages 使用您已经熟悉的原生包工具命令来发布和安装包版本。
对 GitHub Container Registry 的支持
GitHub Container Registry 在 ghcr.io/OWNER/IMAGE-NAME 托管容器。
| 包客户端 | 语言 | 包格式 | 描述 |
|---|---|---|---|
| docker | 不适用 | Dockerfile | 节点包管理器 |
有关
GitHub Container Registry 提供的容器支持的更多信息,请参阅“关于 GitHub Container Registry”。
对包注册表的支持
包注册表使用 PACKAGE-TYPE.pkg.github.com/OWNER/REPOSITORY/IMAGE-NAME 作为包主机 URL,用包命名空间替换 PACKAGE-TYPE。 例如,Gemfile 将托管在 rubygem.pkg.github.com/OWNER/REPOSITORY/IMAGE-NAME 上。
| 语言 | 描述 | 包格式 | 包客户端 | 包命名空间 |
|---|---|---|---|---|
| JavaScript | 节点包管理器 | package.json | npm | npm.pkg.github.com/OWNER/REPOSITORY/IMAGE-NAME |
| Ruby | RubyGems 包管理器 | Gemfile | gem | rubygems.pkg.github.com/OWNER/REPOSITORY/IMAGE-NAME |
| Java | Apache Maven 项目管理和理解工具 | pom.xml | mvn | maven.HOSTNAME/OWNER/REPOSITORY/IMAGE-NAME |
| Java | Java 的 Gradle 构建自动化工具 | build.gradle 或 build.gradle.kts | gradle | maven.HOSTNAME/OWNER/REPOSITORY/IMAGE-NAME |
| .NET | .NET 的 NuGet 包管理 | nupkg | dotnet CLI | nuget.pkg.github.com/OWNER/REPOSITORY/IMAGE-NAME` |
有关配置包客户端以用于 GitHub Packages 的更多信息,请参阅“将 GitHub Packages 用于项目的生态系统”。
向 GitHub Packages 验证
您需要访问令牌才能发布、安装和删除 GitHub Packages 中的包。 您可以使用个人访问令牌直接向 GitHub Packages 或 GitHub API 验证您的用户名。 创建个人访问令牌时,可根据需要为令牌分配不同的作用域。
To authenticate using a GitHub Actions 工作流程:
- 对于包注册表 (
PACKAGE-REGISTRY.pkg.github.com/OWNER/REPOSITORY/IMAGE-NAME),您可以使用GITHUB_TOKEN。 - 对于容器注册表 (
ghcr.io/OWNER/IMAGE-NAME),必须使用个人访问令牌。
关于令牌
| 作用域 | 描述 |
|---|---|
read:packages | 从 GitHub Container Registry 下载和安装容器映像 |
write:packages | 上传和发布容器映像到 GitHub Container Registry |
delete:packages | 从 GitHub Container Registry 删除私有或公共容器映像的特定版本。 更多信息请参阅“删除容器映像”。 |
要了解容器映像的可用范围和权限,请参阅“关于 GitHub Container Registry”或“配置容器的访问控制和可见性”。
管理包
要安装或发布包,您必须使用具有适当作用域的令牌,并且您的用户帐户必须对该仓库具有适当的权限。
例如:
- 要从仓库下载和安装包,您的令牌必须具有
read:packages作用域,并且您的用户帐户必须对该仓库具有读取权限。 如果是私有仓库,您的令牌还必须具有repo作用域。 - 要在 GitHub 上删除私有包的特定版本,您的令牌必须具有
delete:packages和repo作用域。 公共包无法删除。 更多信息请参阅“删除包”。
| 作用域 | 描述 | 仓库权限 |
|---|---|---|
read:packages | 从 GitHub Packages 下载和安装包 | 读取 |
write:packages | 将包上传和发布到 GitHub Packages | 写入 |
delete:packages | 从 GitHub Packages 删除私有包的特定版本 | 管理员 |
repo | 安装、上传和删除私有仓库中的某些包(对应 read:packages、write:packages 或 delete:packages) | 读取、写入或管理员 |
创建 GitHub Actions 工作流程时,您可以使用 GITHUB_TOKEN 发布和安装 GitHub Packages 中的包,无需存储和管理个人访问令牌。
更多信息请参阅:
- 遇到任何与文档相矛盾的事情
- “创建个人访问令牌”。
- 发布的包中含有敏感数据,例如违反 GDPR、API 密钥或个人身份信息
管理包
You can delete a version of a private package on GitHub or using the GraphQL API. 使用 GraphQL API 查询和删除私有包时,必须使用与向 GitHub Packages 验证时相同的令牌。 更多信息请参阅“删除包”和“使用 GraphQL 进行调用”。
您可以配置 web 挂钩来订阅与包相关的事件,例如包的发布或更新等事件。 更多信息请参阅“package web 挂钩事件”。
联系支持
如果您对 GitHub Packages 有反馈或功能请求,请使用 GitHub Packages 反馈表。
如果在 GitHub Packages 方面遇到以下问题,请使用我们的联系表联系 GitHub 支持:
- 遇到任何与文档相矛盾的事情
- 遇到模糊或不清楚的错误
- 发布的包中含有敏感数据,例如违反 GDPR、API 密钥或个人身份信息