正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

GitLabパッケージレジストリの管理

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab Self-Managed

GitLabをさまざまな一般的なパッケージマネージャーのプライベートリポジトリとして使用するには、パッケージレジストリを使用します。パッケージをビルドして公開すると、ダウンストリームプロジェクトで依存関係として使用できます。

サポートされている形式

パッケージレジストリは、次の形式をサポートしています:

パッケージの種類GitLabバージョン
Composer13.2+
Conan 112.6+
Conan 218.1+
Go13.1+
Maven11.3+
npm11.7+
NuGet12.8+
PyPI12.10+
汎用パッケージ13.5+
Helmチャート14.1+

パッケージレジストリは、モデルレジストリデータの保存にも使用されます。

コントリビュートを受け入れる

次の表に、サポートされていないパッケージ形式を示します。これらの形式のサポートを追加するために、GitLabにコントリビュートすることを検討してください。

形式状態
Chef#36889
CocoaPods#36890
Conda#36891
CRAN#36892
Debianドラフト: マージリクエスト
Opkg#36894
P2#36895
Puppet#36897
RPM#5932
RubyGems#803
SBT#36898
Terraformドラフト: マージリクエスト
Vagrant#36899

レート制限

ダウンストリームプロジェクトで依存関係としてパッケージをダウンロードする際、Packages APIを介して多くのリクエストが行われます。そのため、強制されたユーザーおよびIPレート制限に達する可能性があります。この問題に対処するには、Packages APIに特定のレート制限を定義できます。詳細については、パッケージレジストリのレート制限を参照してください。

パッケージレジストリの有効化または無効化

パッケージレジストリはデフォルトで有効になっています。無効にするには、次の手順に従います:

  1. /etc/gitlab/gitlab.rbを編集します:

    # Change to true to enable packages - enabled by default if not defined
    gitlab_rails['packages_enabled'] = false
  2. ファイルを保存して、GitLabを再設定します:

    sudo gitlab-ctl reconfigure
  1. Helmの値をエクスポートします:

    helm get values gitlab > gitlab_values.yaml
  2. gitlab_values.yamlを編集します:

    global:
      appConfig:
        packages:
          enabled: false
  3. ファイルを保存して、新しい値を適用します:

    helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
  1. docker-compose.ymlを編集します:

    version: "3.6"
    services:
      gitlab:
        environment:
          GITLAB_OMNIBUS_CONFIG: |
            gitlab_rails['packages_enabled'] = false
  2. ファイルを保存して、GitLabを再起動します:

    docker compose up -d
  1. /home/git/gitlab/config/gitlab.ymlを編集します:

    production: &base
      packages:
        enabled: false
  2. ファイルを保存して、GitLabを再起動します:

    # For systems running systemd
    sudo systemctl restart gitlab.target
    
    # For systems running SysV init
    sudo service gitlab restart

ストレージパスの変更

デフォルトでは、パッケージはローカルに保存されますが、デフォルトのローカルの場所を変更したり、オブジェクトストレージを使用したりすることもできます。

ローカルストレージパスの変更

デフォルトでは、パッケージはGitLabインストールからの相対的なローカルパスに保存されます:

  • Linuxパッケージ(Omnibus): /var/opt/gitlab/gitlab-rails/shared/packages/
  • 自己コンパイル(ソース): /home/git/gitlab/shared/packages/

ローカルストレージパスを変更するには:

  1. /etc/gitlab/gitlab.rbを編集し、次の行を追加します:

    gitlab_rails['packages_storage_path'] = "/mnt/packages"
  2. ファイルを保存して、GitLabを再設定します:

    sudo gitlab-ctl reconfigure
  1. /home/git/gitlab/config/gitlab.ymlを編集します:

    production: &base
      packages:
        enabled: true
        storage_path: /mnt/packages
  2. ファイルを保存して、GitLabを再起動します:

    # For systems running systemd
    sudo systemctl restart gitlab.target
    
    # For systems running SysV init
    sudo service gitlab restart

古いストレージパスにパッケージが既に保存されている場合は、既存のパッケージに引き続きアクセスできるように、古い場所から新しい場所にすべて移動します:

mv /var/opt/gitlab/gitlab-rails/shared/packages/* /mnt/packages/

DockerとKubernetesはローカルストレージを使用しません。

  • Helmチャート(Kubernetes)の場合: 代わりにオブジェクトストレージを使用してください。
  • Dockerの場合: /var/opt/gitlab/ディレクトリは、ホスト上のディレクトリにすでにマウントされています。コンテナ内でローカルストレージパスを変更する必要はありません。

オブジェクトストレージを使用する

ローカルストレージに依存する代わりに、オブジェクトストレージを使用してパッケージを保存できます。

詳細については、統合されたオブジェクトストレージの設定の使用方法を参照してください。

オブジェクトストレージとローカルストレージ間でパッケージを移行する

オブジェクトストレージを構成した後、次のタスクを使用して、ローカルストレージとリモートストレージ間でパッケージを移行できます。この処理はバックグラウンドワーカーで実行され、ダウンタイムは不要です。

オブジェクトストレージに移行する

  1. パッケージをオブジェクトストレージに移行します:

    sudo gitlab-rake "gitlab:packages:migrate"
    RAILS_ENV=production sudo -u git -H bundle exec rake gitlab:packages:migrate
  2. PostgreSQLコンソールを使用して、進行状況を追跡し、すべてのパッケージを正常に移行したことを確認します:

    sudo gitlab-rails dbconsole
    sudo gitlab-rails dbconsole --database main
    RAILS_ENV=production sudo -u git -H psql -d gitlabhq_production
  3. 次のSQLクエリを使用して、すべてのパッケージをオブジェクトストレージに移行したことを確認します。objectstgの数がtotalと同じである必要があります:

    SELECT count(*) AS total,
           sum(case when file_store = '1' then 1 else 0 end) AS filesystem,
           sum(case when file_store = '2' then 1 else 0 end) AS objectstg
    FROM packages_package_files;

    出力例:

    total | filesystem | objectstg
    ------+------------+-----------
     34   |          0 |        34
  4. 最後に、ディスク上のpackagesディレクトリにファイルがないことを確認します:

    sudo find /var/opt/gitlab/gitlab-rails/shared/packages -type f | grep -v tmp | wc -l
    sudo -u git find /home/git/gitlab/shared/packages -type f | grep -v tmp | wc -l

オブジェクトストレージからローカルストレージに移行する

  1. パッケージをオブジェクトストレージからローカルストレージに移行します:

    sudo gitlab-rake "gitlab:packages:migrate[local]"
    RAILS_ENV=production sudo -u git -H bundle exec rake "gitlab:packages:migrate[local]"
  2. PostgreSQLコンソールを使用して、進行状況を追跡し、すべてのパッケージを正常に移行したことを確認します:

    sudo gitlab-rails dbconsole
    sudo gitlab-rails dbconsole --database main
    RAILS_ENV=production sudo -u git -H psql -d gitlabhq_production
  3. 次のSQLクエリを使用して、すべてのパッケージがローカルストレージに移行されたことを確認します。filesystemの数がtotalと同じである必要があります:

    SELECT count(*) AS total,
           sum(case when file_store = '1' then 1 else 0 end) AS filesystem,
           sum(case when file_store = '2' then 1 else 0 end) AS objectstg
    FROM packages_package_files;

    出力例:

    total | filesystem | objectstg
    ------+------------+-----------
     34   |         34 |         0
  4. 最後に、packagesディレクトリにファイルが存在することを確認します:

    sudo find /var/opt/gitlab/gitlab-rails/shared/packages -type f | grep -v tmp | wc -l
    sudo -u git find /home/git/gitlab/shared/packages -type f | grep -v tmp | wc -l