注: GitHub Packages 目前正在测试用于 GitHub Enterprise Server 2.22。 要加入 您的 GitHub Enterprise Server 实例 的测试版,请使用注册表单。
注:安装或发布 Docker 映像时,GitHub Packages 当前不支持外部图层,如 Windows 映像。
基本要求
-
必须拥有 rubygems 2.4.1 或更高版本. 要查找您的 rubygems 版本:
$ gem --version
-
必须拥有 bundler 1.6.4 或更高版本. 要查找您的 Bundler 版本:
$ bundle --version Bundler version 1.13.7
-
安装 keycutter 以管理多个凭据. 要安装 keycutter:
$ gem install keycutter
向 GitHub Packages 验证
您需要访问令牌才能发布、安装和删除 GitHub Packages 中的包。
您可以使用个人访问令牌 (PAT) 向 GitHub Packages 或 GitHub API 验证。 创建个人访问令牌时,可根据需要为令牌分配不同的作用域。 有关 PAT 与包相关的域的更多信息,请参阅“关于 GitHub Packages 的权限”。
要在 GitHub Actions 工作流程内向 GitHub Packages 注册表验证,您可以使用:
GITHUB_TOKEN
来发布与工作流程仓库相关联的包。- PAT 来安装与其他私有仓库(
GITHUB_TOKEN
无法访问)相关联的包。
有关 GitHub Actions 工作流程中使用的 GITHUB_TOKEN
的更多信息,请参阅“工作流程中的身份验证”。
使用个人访问令牌进行身份验证
您必须使用具有适当范围的个人访问令牌才可在 GitHub Packages 中发布和安装。 更多信息请参阅“关于 GitHub Packages”。
通过编辑用于发布 gem 的 ~/.gem/credentials 文件、编辑用于安装单个 gem 的 ~/.gemrc 文件或使用用于跟踪和安装一个或多个 gem 的 Bundler,使用 RubyGems 向 GitHub Packages 验证。
要发布新的 gem,您需要通过编辑 ~/.gem/credentials 文件以包含您的个人访问令牌,使用 RubyGems 向 GitHub Packages 验证。 如果 ~/.gem/credentials 文件不存在,请新建该文件。
例如,您要创建或编辑 ~/.gem/credentials 以包含以下内容,将 TOKEN 替换为您的个人访问令牌。
gem.metadata = { "github_repo" => "ssh://github.com/OWNER/REPOSITORY" }
要安装 gem,您需要通过编辑项目的 ~/.gemrc 文件以包含 https://USERNAME:TOKEN@REGISTRY-URL/OWNER/
,向 GitHub Packages 验证。 必须:
- 将
USERNAME
替换为您的 GitHub 用户名。 - 将
TOKEN
替换为您的个人访问令牌。 - 将
OWNER
替换为拥有项目所在仓库的用户或组织帐户的名称。 REGISTRY-URL
替换为您实例的 Rubygems 注册表的 URL。 如果您的实例启用了子域隔离,请使用rubygems.HOSTNAME
。 如果您的实例禁用了子域隔离,请使用HOSTNAME/_registry/rubygems
。 在任一情况下,都将 HOSTNAME 替换为 GitHub Enterprise Server 实例的主机名。
如果您没有 ~/.gemrc 文件,请使用此示例创建新的 ~/.gemrc 文件。
---
:backtrace: false
:bulk_threshold: 1000
:sources:
- https://rubygems.org/
- https://USERNAME:TOKEN@REGISTRY-URL/OWNER/
:update_sources: true
:verbose: true
要使用 Bundler 进行身份验证,请配置 Bundler 使用您的个人访问令牌,将 USERNAME 替换为您的 GitHub 用户名,将 TOKEN 替换为您的个人访问令牌,将 OWNER 替换为拥有项目所在仓库的用户或组织帐户的名称。将 REGISTRY-URL
替换为实例 Rubygems 注册表的 URL。 如果您的实例启用了子域隔离,请使用 rubygems.HOSTNAME
。 如果您的实例禁用了子域隔离,请使用 HOSTNAME/_registry/rubygems
。 在任一情况下,将 HOSTNAME 替换为您的 GitHub Enterprise Server 实例的主机名。
$ bundle config https://REGISTRY-URL/OWNER USERNAME:TOKEN
发布包
默认情况下,GitHub 将包发布到名称与包相同的现有仓库中。 例如,您将 octo-gem
发布到 octo-org
组织时,GitHub Packages 将 gem 发布到 octo-org/octo-gem
仓库。 有关创建 gem 的更多信息,请参阅 RubyGems 文档中的“创建自己的 gem”。
在发布包后,您可以在 GitHub 上查看该包。 更多信息请参阅“查看包”。
-
向 GitHub Packages 验证。 更多信息请参阅“向 GitHub Packages 验证”。
-
从 gemspec 构建包以创建 .gem 包。
gem build OCTO-GEM.gemspec
-
将包发布到 GitHub Packages,将
OWNER
替换为拥有项目所在仓库的用户或组织帐户的名称,将OCTO-GEM
替换为 gem 包的名称。将REGISTRY-URL
替换为实例 Rubygems 注册表的 URL。 如果您的实例启用了子域隔离,请使用rubygems.HOSTNAME
。 如果您的实例禁用了子域隔离,请使用HOSTNAME/_registry/rubygems
。 在任一情况下,将 HOSTNAME 替换为您的 GitHub Enterprise Server 实例的主机名。$ gem push --key github \ --host https://REGISTRY-URL/OWNER \ OCTO-GEM-0.0.1.gem
将多个包发布到同一个仓库
要将多个 gem 发布到同一个仓库,您可以在 gem.metadata
的 github_repo
字段中包含 GitHub 仓库的 URL。 如果您包含此字段,则 GitHub 根据此值匹配仓库,而不使用 gem 名称。 将 HOSTNAME 替换为 您的 GitHub Enterprise Server 实例 的主机名称。
gem.metadata = { "github_repo" => "ssh://HOSTNAME/OWNER/REPOSITORY" }
安装包
您可以使用来自 GitHub Packages 的 gem,就像使用来自 rubygems.org 的 gem 一样。 您需要通过将您的 GitHub 用户或组织添加为 ~/.gemrc 文件中的源,或者使用 Bundler 并编辑 Gemfile,向 GitHub Packages 验证。
-
向 GitHub Packages 验证。 更多信息请参阅“向 GitHub Packages 验证”。
-
对于 Bundler,请将您的 GitHub 用户或组织添加为 Gemfile 中的源,以便从这个新源获取 gem。 例如,您可以将新的
source
块添加到仅对您指定的包使用 GitHub Packages 的 Gemfile,将 GEM NAME 替换为要从 GitHub Packages 安装的包,将 OWNER 替换为拥有要安装的 gem 所在仓库的用户或组织。 将REGISTRY-URL
替换为实例的 Rubygems 注册表的 URL。 如果您的实例启用了子域隔离,请使用rubygems.HOSTNAME
。 如果您的实例禁用了子域隔离,请使用HOSTNAME/_registry/rubygems
。 在任一情况下,将 HOSTNAME 替换为您的 GitHub Enterprise Server 实例的主机名。source "https://rubygems.org" gem "rails" source "https://REGISTRY-URL/OWNER" do gem "GEM NAME" end
-
对于 1.7.0 之前的 Bundler 版本,您需要增加新的全局
source
。 有关使用 Bundler 的更多信息,请参阅 bundler.io 文档。source "https://REGISTRY-URL/OWNER" source "https://rubygems.org" gem "rails" gem "GEM NAME"
-
安装包:
$ gem install octo-gem --version "0.1.1"
延伸阅读
- "删除包"