我们经常发布文档更新,此页面的翻译可能仍在进行中。有关最新信息,请访问英文文档。如果此页面上的翻译有问题,请告诉我们

配置 RubyGems 用于 GitHub Package Registry

您可以配置 RubyGems 以通过 GitHub 包注册表 发布包并将该包用作含 Bundler 的 Ruby 项目中的依赖项。

GitHub 包注册表 目前提供有限的公开测试版。更多信息请参阅“关于 GitHub 包注册表”。

本文内容

基本要求

$ gem --version
$ bundle --version
Bundler version 1.13.7
$ gem install keycutter

向 GitHub 包注册表 验证

必须使用具有 read:packageswrite:packages 作用域的个人访问令牌才能通过 RubyGems 在 GitHub 包注册表 中发布和删除公共包。 对于私有仓库,您的个人访问令牌还必须具有 repo 作用域。 更多信息请参阅“创建用于命令行的个人访问令牌”。

  1. 通过编辑 ~/.gem/credentials 或创建它(如果它不存在),配置 npm 在推送新 gem 时使用令牌。 将 TOKEN 替换为您的个人访问令牌并添加此行:


    :github: Bearer TOKEN

    2. 配置 Bundler 使用您的令牌。 将 `OWNER` 替换为要发布 gem 的仓库的 GitHub 用户或组织名称,然后输入您的 GitHub 用户名和个人访问令牌。
    
    <pre><code class="hljs language-shell">$ bundle config https://rubygems.pkg.github.com/<em>OWNER USERNAME:TOKEN</em></code></pre>
    
    ### 发布包
    
    您可以使用 `gem push` 命令向 GitHub 包注册表 发布包。
    
    <pre><code class="hljs language-shell">$ gem push --key github \
    --host https://rubygems.pkg.github.com/<em>OWNER</em> \
    <em>YOUR-GEM</em>.gem
    

默认情况下,包名称用于确定要将 gem 发布到的仓库。 例如,发布到 'my-org' 组织的名为 'mygem' 的 gem 被发布到 my-org/mygem GitHub 仓库。 将自动为 gem 的版本创建 GitHub 版本和关联 Git 标记(如果尚不存在)。

如果要将多个 gem 发布到同一个仓库,您可以在 gemspec 元数据的 github_repo 字段中包含 GitHub 仓库的 URL。 如果包含此字段,GitHub 将根据此字段的值匹配仓库,而不是根据 gem 名称。

例如:

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

有关创建 gem 的更多信息,请参阅 RubyGems 文档中的“创建自己的 gem”。

您可以通过以下 URL 访问您的包(使用您的 GitHub 用户或组织名称替换 OWNER,使用您的仓库名称替换 REPOSITORY):https://github.com/OWNER/REPOSITORY/packages

### 接收包注册表事件

在发布或更新包时,您可以接收 web 挂钩事件。更多信息请参阅“GitHub 开发者文档中的 [RegistryPackageEvent](https://developer.github.com/v3/activity/events/types/#registrypackageevent)”。

### 安装包

在项目中使用来自 GitHub 包注册表 的 gem 类似于使用来自 rubygems.org 的 gem。 您可以将 GitHub 用户或组织添加为 Gemfile 中的源,然后从其中获取 gem。

例如,以下是一个简单的 Ruby on Rails 应用程序的 `Gemfile`:

    source "https://rubygems.org"
    
    gem "rails"
    

为包含 gem 所在仓库的 GitHub 用户或组织添加新 `source` 块。 例如,要修改相同的 rails 应用程序 `Gemfile`:

    source "https://rubygems.org" 
    
    gem "rails"
    
    source "https://rubygems.pkg.github.com/OWNER" do
      gem "GEM NAME"
    end
    

对 1.7.0 之前的版本,改为新增全局 `source`:

    source "https://rubygems.pkg.github.com/OWNER"
    source "https://rubygems.org"
    
    gem "rails"
    gem "GEM NAME"
    

当您 `bundle install` 时,将自动使用此前通过 `bundle config` 配置的凭据。 有关使用 bundler 的更多信息,请参阅 [bundler.io 文档](http://bundler.io/v1.5/gemfile.html)。

### 删除包

为避免破坏可能依赖于包的项目,GitHub 包注册表 不支持删除包或删除包的版本。在特殊情况下,例如出于法律原因或为了符合 GDPR 标准,您可以通过 GitHub 支持 申请删除包。请使用[我们的联系表](https://github.com/contact?form%5Bsubject%5D=Re:%20GitHub%20Package%20Registry) 和主题行 "GitHub 包注册表" 联系 GitHub 支持。

问问别人

找不到要找的内容?

联系我们