GitLabパッケージレジストリの管理
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab Self-Managed
GitLabをさまざまな一般的なパッケージマネージャーのプライベートリポジトリとして使用するには、パッケージレジストリを使用します。パッケージをビルドして公開すると、ダウンストリームプロジェクトで依存関係として使用できます。
サポートされている形式
パッケージレジストリは、次の形式をサポートしています:
| パッケージの種類 | GitLabバージョン |
|---|---|
| Composer | 13.2+ |
| Conan 1 | 12.6+ |
| Conan 2 | 18.1+ |
| Go | 13.1+ |
| Maven | 11.3+ |
| npm | 11.7+ |
| NuGet | 12.8+ |
| PyPI | 12.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に特定のレート制限を定義できます。詳細については、パッケージレジストリのレート制限を参照してください。
パッケージレジストリの有効化または無効化
パッケージレジストリはデフォルトで有効になっています。無効にするには、次の手順に従います:
/etc/gitlab/gitlab.rbを編集します:# Change to true to enable packages - enabled by default if not defined gitlab_rails['packages_enabled'] = falseファイルを保存して、GitLabを再設定します:
sudo gitlab-ctl reconfigure
Helmの値をエクスポートします:
helm get values gitlab > gitlab_values.yamlgitlab_values.yamlを編集します:global: appConfig: packages: enabled: falseファイルを保存して、新しい値を適用します:
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
docker-compose.ymlを編集します:version: "3.6" services: gitlab: environment: GITLAB_OMNIBUS_CONFIG: | gitlab_rails['packages_enabled'] = falseファイルを保存して、GitLabを再起動します:
docker compose up -d
/home/git/gitlab/config/gitlab.ymlを編集します:production: &base packages: enabled: falseファイルを保存して、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/
ローカルストレージパスを変更するには:
/etc/gitlab/gitlab.rbを編集し、次の行を追加します:gitlab_rails['packages_storage_path'] = "/mnt/packages"ファイルを保存して、GitLabを再設定します:
sudo gitlab-ctl reconfigure
/home/git/gitlab/config/gitlab.ymlを編集します:production: &base packages: enabled: true storage_path: /mnt/packagesファイルを保存して、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/ディレクトリは、ホスト上のディレクトリにすでにマウントされています。コンテナ内でローカルストレージパスを変更する必要はありません。
オブジェクトストレージを使用する
ローカルストレージに依存する代わりに、オブジェクトストレージを使用してパッケージを保存できます。
詳細については、統合されたオブジェクトストレージの設定の使用方法を参照してください。
オブジェクトストレージとローカルストレージ間でパッケージを移行する
オブジェクトストレージを構成した後、次のタスクを使用して、ローカルストレージとリモートストレージ間でパッケージを移行できます。この処理はバックグラウンドワーカーで実行され、ダウンタイムは不要です。
オブジェクトストレージに移行する
パッケージをオブジェクトストレージに移行します:
sudo gitlab-rake "gitlab:packages:migrate"RAILS_ENV=production sudo -u git -H bundle exec rake gitlab:packages:migratePostgreSQLコンソールを使用して、進行状況を追跡し、すべてのパッケージを正常に移行したことを確認します:
sudo gitlab-rails dbconsolesudo gitlab-rails dbconsole --database mainRAILS_ENV=production sudo -u git -H psql -d gitlabhq_production次の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最後に、ディスク上の
packagesディレクトリにファイルがないことを確認します:sudo find /var/opt/gitlab/gitlab-rails/shared/packages -type f | grep -v tmp | wc -lsudo -u git find /home/git/gitlab/shared/packages -type f | grep -v tmp | wc -l
オブジェクトストレージからローカルストレージに移行する
パッケージをオブジェクトストレージからローカルストレージに移行します:
sudo gitlab-rake "gitlab:packages:migrate[local]"RAILS_ENV=production sudo -u git -H bundle exec rake "gitlab:packages:migrate[local]"PostgreSQLコンソールを使用して、進行状況を追跡し、すべてのパッケージを正常に移行したことを確認します:
sudo gitlab-rails dbconsolesudo gitlab-rails dbconsole --database mainRAILS_ENV=production sudo -u git -H psql -d gitlabhq_production次の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最後に、
packagesディレクトリにファイルが存在することを確認します:sudo find /var/opt/gitlab/gitlab-rails/shared/packages -type f | grep -v tmp | wc -lsudo -u git find /home/git/gitlab/shared/packages -type f | grep -v tmp | wc -l