パッケージレジストリのRuby gems

GitLab 13.10で導入されました

caution
GitLab 用 Ruby gems パッケージレジストリは開発中であり、機能が限られているため実運用にはまだ対応していません。このエピックでは、本番環境での利用を可能にするための残りの作業とスケジュールについて詳しく説明します。

Ruby gems をプロジェクトのパッケージレジストリに公開し、依存関係として使用するときにパッケージをインストールします。gemをレジストリにプッシュすることはできますが、レジストリからインストールすることはできません。しかし、gem ファイルを Package Registry の UI から直接ダウンロードしたり、API を使用したりすることができます。

Ruby gems および Bundler パッケージマネージャークライアントが使用する特定の API エンドポイントのドキュメントについては、Ruby gems API ドキュメント を参照してください。

Ruby gems レジストリの有効化

GitLabのRuby gemsレジストリは機能フラグの後ろにあり、デフォルトでは無効になっています。GitLab RailsコンソールにアクセスできるGitLab管理者は、インスタンスに対してこのレジストリを有効にすることができます。

有効にするには:

Feature.enable(:rubygem_packages)

無効化するには:

Feature.disable(:rubygem_packages)

特定のプロジェクトで有効または無効にします:

Feature.enable(:rubygem_packages, Project.find(1))
Feature.disable(:rubygem_packages, Project.find(2))

Ruby gemを作成します。

Ruby gemの作成については、RubyGemsのドキュメントを参照してください。

パッケージレジストリへの認証

パッケージレジストリにプッシュする前に認証が必要です。

そのためには

個人アクセストークンまたはデプロイトークンによる認証

個人アクセストークンで認証するには、~/.gem/credentials ファイルを作成または編集して、以下のように追加します:

---
https://gitlab.example.com/api/v4/projects/<project_id>/packages/rubygems: '<your token>'
  • <your token> には、個人アクセストークンまたはデプロイトークンのトークン値を指定してください。
  • プロジェクトIDはプロジェクトのホームページに記載されています。

CIジョブトークンによる認証

GitLab CI/CD 内で RubyGems コマンドを操作するには、個人アクセストークンや デプロイトークンの代わりにCI_JOB_TOKEN 環境変数を使用できます。

使用例:

# assuming a my_gem.gemspec file is present in the repository with the version currently set to 0.0.1
image: ruby

run:
  before_script:
    - mkdir ~/.gem
    - echo "---" > ~/.gem/credentials
    - |
      echo "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/rubygems: '${CI_JOB_TOKEN}'" >> ~/.gem/credentials
    - chmod 0600 ~/.gem/credentials # rubygems requires 0600 permissions on the credentials file
  script:
    - gem build my_gem
    - gem push my_gem-0.0.1.gem --host ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/rubygems

GitLabにチェックインする~/.gem/credentials ファイルでCI_JOB_TOKEN

---
https://gitlab.example.com/api/v4/projects/${env.CI_PROJECT_ID}/packages/rubygems: '${env.CI_JOB_TOKEN}'

Ruby gem をプッシュする

前提条件:

gemをプッシュするには、以下のようなコマンドを実行します:

gem push my_gem-0.0.1.gem --host <host>

<host> は、認証を設定する際に使用したURLです。例えば

gem push my_gem-0.0.1.gem --host https://gitlab.example.com/api/v4/projects/1/packages/rubygems

このメッセージは、gemが正常にアップロードされたことを示します:

Pushing gem to https://gitlab.example.com/api/v4/projects/1/packages/rubygems...
{"message":"201 Created"}

公開されたgemを見るには、プロジェクトのPackages and registriesページにアクセスしてください。GitLabにプッシュされたgemは、すぐにプロジェクトのPackages UIに表示されるわけではありません。gemの処理には最大10分かかることがあります。

同じ名前またはバージョンのgemをプッシュする場合

同じ名前とバージョンのパッケージが既に存在する場合、gemをプッシュすることができます。どちらもUIに表示され、アクセスできます。ただし、インストールには最近プッシュされたgemのみが使用されます。

Ruby gemのインストール

GitLab 用の Ruby gems レジストリは開発中であり、実運用にはまだ対応していません。レジストリからGemsをインストールすることはできません。しかし、.gem ファイルを UI から直接ダウンロードしたり、API を使用することができます。