Skip to main content

RubyGems 레지스트리 작업

패키지를 GitHub Packages에 게시하고 GitHub Packages에 저장된 패키지를 Bundler가 있는 Ruby 프로젝트의 종속성으로 사용하도록 RubyGems를 구성할 수 있습니다.

GitHub Packages는 GitHub Free, GitHub Pro, 조직용 GitHub Free, GitHub Team, GitHub Enterprise Cloud, GitHub Enterprise Server 3.0 이상 및 GitHub AE를 이용해 사용할 수 있습니다.
GitHub Packages는 레거시 리포지토리별 플랜을 사용하는 계정이 소유한 프라이빗 리포지토리에서 사용할 수 없습니다. 또한 레거시 리포지토리별 플랜을 사용하는 계정은 리포지토리별로 요금이 청구되므로 Container registry에 액세스할 수 없습니다. 자세한 내용은 “GitHub 제품”을 참조하세요.

Prerequisites

  • You must have RubyGems 2.4.1 or higher. To find your RubyGems version:

    $ gem --version
  • You must have bundler 1.6.4 or higher. To find your Bundler version:

    $ bundle --version
    Bundler version 1.13.7

Authenticating to GitHub Packages

GitHub Packages only supports authentication using a personal access token (classic). For more information, see "Creating a personal access token."

You need an access token to publish, install, and delete private, internal, and public packages.

You can use a personal access token (classic) to authenticate to GitHub Packages or the GitHub API. When you create a personal access token (classic), you can assign the token different scopes depending on your needs. For more information about packages-related scopes for a personal access token (classic), see "About permissions for GitHub Packages."

To authenticate to a GitHub Packages registry within a GitHub Actions workflow, you can use:

  • GITHUB_TOKEN to publish packages associated with the workflow repository.
  • a personal access token (classic) with at least packages:read scope to install packages associated with other private repositories (which GITHUB_TOKEN can't access).

For more information about GITHUB_TOKEN used in GitHub Actions workflows, see "Authentication in a workflow."

Authenticating with a personal access token

You must use a personal access token (classic) with the appropriate scopes to publish and install packages in GitHub Packages. For more information, see "About GitHub Packages."

To publish and install gems, you can configure RubyGems or Bundler to authenticate to GitHub Packages using your personal access token.

To publish new gems, you need to authenticate to GitHub Packages with RubyGems by editing your ~/.gem/credentials file to include your personal access token (classic). Create a new ~/.gem/credentials file if this file doesn't exist.

For example, you would create or edit a ~/.gem/credentials to include the following, replacing TOKEN with your personal access token.

---
:github: Bearer TOKEN

To install gems, you need to authenticate to GitHub Packages by updating your gem sources to include https://USERNAME:TOKEN@rubygems.pkg.github.com/OWNER/. You must replace:

  • USERNAME with your GitHub username.
  • TOKEN with your personal access token (classic).
  • OWNER with the name of the user or organization account that owns the repository containing your project.

If you would like your package to be available globally, you can run the following command to add your registry as a source.

gem sources --add https://USERNAME:TOKEN@rubygems.pkg.github.com/OWNER/

To authenticate with Bundler, configure Bundler to use your personal access token (classic), replacing USERNAME with your GitHub username, TOKEN with your personal access token, and OWNER with the name of the user or organization account that owns the repository containing your project.

$ bundle config https://rubygems.pkg.github.com/OWNER USERNAME:TOKEN

Publishing a package

By default, GitHub publishes the package to an existing repository with the same name as the package. For example, when you publish <GEM NAME> to the octo-org organization, GitHub Packages publishes the gem to the octo-org/<GEM NAME> repository. For more information on creating your gem, see "Make your own gem" in the RubyGems documentation.

After you publish a package, you can view the package on GitHub. For more information, see "Viewing packages."

  1. Authenticate to GitHub Packages. For more information, see "Authenticating to GitHub Packages."

  2. Build the package from the gemspec to create the .gem package.

    gem build <GEM NAME>.gemspec
    
  3. Publish a package to GitHub Packages, replacing OWNER with the name of the user or organization account that owns the repository containing your project and <GEM NAME> with the name of your gem package.

    $ gem push --key github \
    --host https://rubygems.pkg.github.com/OWNER \
    <GEM NAME>-0.0.1.gem
    

Publishing multiple packages to the same repository

To publish multiple gems to the same repository, you can include the URL to the GitHub repository in the github_repo field in gem.metadata. If you include this field, GitHub matches the repository based on this value, instead of using the gem name.

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

Installing a package

You can use gems from GitHub Packages much like you use gems from rubygems.org. You need to authenticate to GitHub Packages by adding your GitHub user or organization as a source in the ~/.gemrc file or by using Bundler and editing your Gemfile.

  1. Authenticate to GitHub Packages. For more information, see "Authenticating to GitHub Packages."

  2. For Bundler, add your GitHub user or organization as a source in your Gemfile to fetch gems from this new source. For example, you can add a new source block to your Gemfile that uses GitHub Packages only for the packages you specify, replacing GEM NAME with the package you want to install from GitHub Packages and OWNER with the user or organization that owns the repository containing the gem you want to install.

    source "https://rubygems.org"
    
    gem "rails"
    
    source "https://rubygems.pkg.github.com/OWNER" do
      gem "GEM NAME"
    end
    
  3. For Bundler versions earlier than 1.7.0, you need to add a new global source. For more information on using Bundler, see the bundler.io documentation.

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

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

Further reading