Skip to main content
We publish frequent updates to our documentation, and translation of this page may still be in progress. For the most current information, please visit the English documentation.
GitHub AE is currently under limited release.

使用 RubyGems 注册表

您可以配置 RubyGems 以将包发布到 GitHub Packages 并将存储在 GitHub Packages 上的包用作带 Bundler 的 Ruby 项目中的依赖项。

注意: GitHub Packages 目前正在测试用于 GitHub AE。

先决条件

  • 您必须具有 RubyGems 2.4.1 或更高版本。 要查找您的 RubyGems 版本:

    $ gem --version
  • 必须拥有 bundler 1.6.4 或更高版本。 要查找您的 Bundler 版本:

    $ bundle --version
    Bundler version 1.13.7

向 GitHub Packages 验证

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

可使用 personal access token 向 GitHub Packages 或 GitHub AE API 进行身份验证。 创建 personal access token 时,可根据需要为令牌分配不同的作用域。 有关 personal access token 的包相关范围的详细信息,请参阅“关于 GitHub Packages 的权限”。

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

  • GITHUB_TOKEN 发布与工作流存储库相关联的包。
  • 范围至少为 read:packages 的 personal access token,用于安装与其他专用存储库(GITHUB_TOKEN 无法访问)关联的包。

使用 personal access token 进行身份验证

必须使用具有适当范围的 personal access token 才可在 GitHub Packages 中发布和安装包。 有关详细信息,请参阅“关于 GitHub Packages”。

要发布和安装 gem,可以将 RubyGems 或 Bundler 配置为使用 personal access token 向 GitHub Packages 进行身份验证。

要发布新的 gem,需要通过编辑 ~/.gem/credentials 文件以包含你的 personal access token,使用 RubyGems 向 GitHub Packages 进行身份验证。 如果此文件不存在,请创建新的 ~/.gem/credentials 文件。

例如,创建或编辑 ~/.gem/credentials 以包含以下内容,将 TOKEN 替换为 personal access token 。

---
:github: Bearer TOKEN

要安装 gem,需要通过更新 gem 资源以包含 https://USERNAME:TOKEN@REGISTRY-URL/OWNER/,来向 GitHub Packages 进行身份验证。 必须:

  • USERNAME 替换为 GitHub 用户名。
  • TOKEN 替换为 personal access token。
  • OWNER 替换为拥有项目所在存储库的用户或组织帐户的名称。
  • REGISTRY-URL 替换为实例的 Rubygems 注册表 rubygems.HOSTNAME 的 URL。 将 HOSTNAME 替换为 your enterprise 的主机名。

如果希望包全局可用,可以运行以下命令,将注册表添加为源。

gem sources --add https://USERNAME:TOKEN@REGISTRY-URL/OWNER/

若要使用 Bundler 进行身份验证,请将 Bundler 配置为使用 personal access token,将 USERNAME 替换为 GitHub 用户名,将 TOKEN 替换为 personal access token,并将 OWNER 替换为拥有包含项目的存储库的用户或组织帐户的名称。将 REGISTRY-URL 替换为实例的 Rubygems 注册表 rubygems.HOSTNAME 的 URL。 将 HOSTNAME 替换为 your enterprise 的主机名。

$ bundle config https://REGISTRY-URL/OWNER USERNAME:TOKEN

发布包

默认情况下,GitHub 将包发布到与包同名的现有存储库中。 例如,将 <GEM NAME> 发布到 octo-org 组织时,GitHub Packages 会将 gem 发布到 octo-org/<GEM NAME> 存储库。有关创建 gem 的详细信息,请参阅 RubyGems 文档中的“创建自己的 gem”。

  1. 向 GitHub Packages 验证。 有关详细信息,请参阅“向 GitHub Packages 进行身份验证”。

  2. 从 gemspec 生成包以创建 .gem 包 。

    gem build <GEM NAME>.gemspec
    
  3. 将包发布到 GitHub Packages,将 OWNER 替换为的名称,并将 <GEM NAME> 替换为 gem 包的名称。 将 REGISTRY-URL 替换为实例的 Rubygems 注册表 rubygems.HOSTNAME 的 URL。 将 HOSTNAME 替换为 your enterprise 的主机名。

    $ gem push --key github \
    --host https://REGISTRY-URL/OWNER \
    <GEM NAME>-0.0.1.gem
    

将多个包发布到同一个仓库

要将多个 gem 发布到同一存储库,可在 gem.metadatagithub_repo 字段中包含指向 GitHub 存储库的 URL。 如果包含此字段,则 GitHub 将基于此值匹配存储库,而不是使用 gem 名称。将 HOSTNAME 替换为 your enterprise 的主机名。

gem.metadata = { "github_repo" => "ssh://HOSTNAME/OWNER/REPOSITORY" }

安装包

可使用来自 GitHub Packages 的 gem,就像使用来自 rubygems.org 的 gem 一样。需要通过在 ~/.gemrc 文件中将 GitHub 用户或组织添加为源,或者通过使用 Bundler 并编辑 Gemfile,对 GitHub Packages 进行身份验证 。

  1. 向 GitHub Packages 验证。 有关详细信息,请参阅“向 GitHub Packages 进行身份验证”。

  2. 对于 Bundler,请将 GitHub 用户或组织添加为 Gemfile 中的源,以便从这个新源获取 gem。 例如,可以将一个新的 source 块添加到 Gemfile,其仅对指定的包使用 GitHub Packages,将 GEM NAME 替换为要从 GitHub Packages 安装的包,并将“所有者”替换为拥有包含要安装的 gem 的存储库的用户或组织。 将 REGISTRY-URL 替换为实例的 Rubygems 注册表 rubygems.HOSTNAME 的 URL。 将 HOSTNAME 替换为 your enterprise 的主机名。

    source "https://rubygems.org"
    
    gem "rails"
    
    source "https://REGISTRY-URL/OWNER" do
      gem "GEM NAME"
    end
    
  3. 对于低于 1.7.0 的 Bundler 版本,需要添加新的全局 source。 有关使用 Bundler 的详细信息,请参阅 bundler.io 文档

    source "https://REGISTRY-URL/OWNER"
    source "https://rubygems.org"
    
    gem "rails"
    gem "GEM NAME"
    
  4. 安装包:

    $ gem install <GEM NAME> --version "0.1.1"
    

延伸阅读