GitLab 软件包库管理
- Tier: Free, Premium, Ultimate
- Offering: GitLab Self-Managed
要将 GitLab 用作多种常用包管理器的私有仓库,请使用软件包库。 您可以构建和发布 软件包,这些软件包可以作为依赖项在下游项目中使用。
支持的格式
软件包库支持以下格式:
| Package type | GitLab version |
|---|---|
| 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+ |
| Generic packages | 13.5+ |
| Helm Charts | 14.1+ |
软件包库也用于存储 模型注册表数据。
接受贡献
下表列出了不受支持的软件包格式。 欢迎您为 GitLab 做出贡献,以添加对这些格式的支持。
| Format | Status |
|---|---|
| Chef | #36889 |
| CocoaPods | #36890 |
| Conda | #36891 |
| CRAN | #36892 |
| Debian | Draft: Merge request |
| Opkg | #36894 |
| P2 | #36895 |
| Puppet | #36897 |
| RPM | #5932 |
| RubyGems | #803 |
| SBT | #36898 |
| Terraform | Draft: Merge request |
| Vagrant | #36899 |
速率限制
在下游项目中将软件包作为依赖项下载时,会通过 Packages API 发出大量请求。 因此,您可能会达到强制执行的用户和 IP 速率限制。为解决此问题,您 可以为 Packages API 定义特定的速率限制。更多详情,请参阅软件包库速率限制。
启用或禁用软件包库
软件包库默认启用。如需禁用它:
-
编辑
/etc/gitlab/gitlab.rb:# 更改为 true 以启用软件包 - 如果未定义则默认启用 gitlab_rails['packages_enabled'] = false -
保存文件并重新配置 GitLab:
sudo gitlab-ctl reconfigure
-
导出 Helm 值:
helm get values gitlab > gitlab_values.yaml -
编辑
gitlab_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:
# 对于运行 systemd 的系统 sudo systemctl restart gitlab.target # 对于运行 SysV init 的系统 sudo service gitlab restart
更改存储路径
默认情况下,软件包存储在本地,但您可以更改默认 的本地位置,甚至可以使用对象存储。
更改本地存储路径
默认情况下,软件包存储在 GitLab 安装目录下的本地路径中:
- Linux package (Omnibus):
/var/opt/gitlab/gitlab-rails/shared/packages/ - Self-compiled (source):
/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:
# 对于运行 systemd 的系统 sudo systemctl restart gitlab.target # 对于运行 SysV init 的系统 sudo service gitlab restart
如果您已有软件包存储在旧存储路径中,请将所有内容 从旧位置移动到新位置,以确保现有软件包仍然可访问:
mv /var/opt/gitlab/gitlab-rails/shared/packages/* /mnt/packages/Docker 和 Kubernetes 不使用本地存储。
- 对于 Helm chart (Kubernetes):请改用对象存储。
- 对于 Docker:
/var/opt/gitlab/目录已挂载到主机上的 某个目录中。无需更改容器内的本地存储路径。
使用对象存储
您可以不依赖本地存储,而是使用对象存储来存储 软件包。
更多信息,请参阅如何使用 统一对象存储设置。
在对象存储和本地存储之间迁移软件包
配置对象存储后,您可以使用以下任务在本地和远程存储之间迁移软件包。处理过程由后台工作程序完成,无需停机。
迁移到对象存储
-
将软件包迁移到对象存储:
sudo gitlab-rake "gitlab:packages:migrate"RAILS_ENV=production sudo -u git -H bundle exec rake gitlab:packages:migrate -
使用 PostgreSQL 控制台跟踪进度并验证所有软件包是否已成功迁移:
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