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

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

サポートされるフォーマット

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

パッケージタイプGitLabバージョン
Composer13.2+
Conan12.6+
Go13.1+
Maven11.3+
npm11.7+
NuGet12.8+
PyPI12.10+
汎用パッケージ13.5+
Helmチャート14.1+

貢献者の募集

以下の表は、サポートされていないがコミュニティへの貢献を受け付けているフォーマットの一覧です。GitLab に貢献することを検討してください。この開発者向けドキュメントでは、その手順を説明しています。

フォーマットステータス
Chef#36889
ココアポッズ#36890
コンダ#36891
CRAN#36892
Debian草案マージリクエスト
Opkg#36894
P2#36895
人形#36897
回転数#5932
RubyGems#803
SBT#36898
Terraform草案マージリクエスト
浮浪者#36899

レート制限

ダウンストリームプロジェクトで依存パッケージとしてパッケージをダウンロードする場合、Packages API を通して多くのリクエストが行われます。そのため、ユーザーやIPのレート制限に達する可能性があります。このイシューに対処するために、Packages APIに対して特定のレート制限を定義することができます。詳しくはPackage Registry Rate Limits を参照してください。

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

パッケージレジストリはデフォルトで有効になっています。無効にするには

Linux package (Omnibus)
  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
    
Helm chart (Kubernetes)
  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
    
Docker
  1. docker-compose.yml を編集します:

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

    docker compose up -d
    
Self-compiled (source)
  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/

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

Linux package (Omnibus)
  1. /etc/gitlab/gitlab.rb を編集し、以下の行を追加します:

    gitlab_rails['packages_storage_path'] = "/mnt/packages"
    
  2. ファイルを保存して GitLab を再設定してください:

    sudo gitlab-ctl reconfigure
    
Self-compiled (source)
  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. パッケージをマイグレーションします。

    Linux package (Omnibus)
    sudo gitlab-rake "gitlab:packages:migrate"
    
    Self-compiled (source)
    RAILS_ENV=production sudo -u git -H bundle exec rake gitlab:packages:migrate
    
  2. 進捗を追跡し、PostgreSQLコンソールを使用してすべてのパッケージが正常にマイグレーションされたことを確認します。

    Linux package (Omnibus) 14.1 and earlier
    sudo gitlab-rails dbconsole
    
    Linux package (Omnibus) 14.2 and later
    sudo gitlab-rails dbconsole --database main
    
    Self-compiled (source)
    RAILS_ENV=production sudo -u git -H psql -d gitlabhq_production
    
  3. 以下のSQLクエリを使用して、すべてのパッケージがオブジェクトストレージにマイグレーションされたことを確認してください。objectstg の数はtotalと同じでなければなりません:

    gitlabhq_production=# 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 ディレクトリにディスク上のファイルがないことを確認します:

    Linux package (Omnibus)
    sudo find /var/opt/gitlab/gitlab-rails/shared/packages -type f | grep -v tmp | wc -l
    
    Self-compiled (source)
    sudo -u git find /home/git/gitlab/shared/packages -type f | grep -v tmp | wc -l