パッケージレジストリのRuby gems
GitLab 13.10で導入されました。
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のドキュメントを参照してください。
パッケージレジストリへの認証
パッケージレジストリにプッシュする前に認証が必要です。
そのためには
- スコープを
api
に設定した個人アクセストークン。 -
read_package_registry
、write_package_registry
、またはその両方にスコープが設定されたデプロイトークン。 - CI ジョブ トークン。
個人アクセストークンまたはデプロイトークンによる認証
個人アクセストークンで認証するには、~/.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サイズは3GBです。
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 を使用することができます。