极狐GitLab 软件包库管理
要将极狐GitLab 用作各种常见包管理器的私有仓库,请使用软件包库。 您可以构建和发布软件包,这些包可以作为下游项目中的依赖项使用。
支持的格式
软件包库支持以下格式:
软件包类型 | 极狐GitLab 版本 |
---|---|
Composer | 13.2+ |
Conan | 12.6+ |
Go | 13.1+ |
Maven | 11.3+ |
npm | 11.7+ |
NuGet | 12.8+ |
PyPI | 12.10+ |
Generic packages | 13.5+ |
Helm Charts | 14.1+ |
速率限制
在下游项目中,将软件包作为依赖项下载时,许多请求是通过包 API 发出的。因此,您可能会达到强制的用户和 IP 速率限制。要解决此问题,您可以为 Packages API 定义特定的速率限制。
启用或禁用软件包仓库
软件包仓库默认启用,如要禁用:
::Tabs
:::TabTitle Linux package (Omnibus)
-
编辑
/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
:::TabTitle Helm chart (Kubernetes)
-
导出 Helm values:
helm get values gitlab > gitlab_values.yaml
-
编辑
gitlab_values.yaml
:global: appConfig: packages: enabled: false
-
保存文件并应用新值:
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
:::TabTitle Docker
-
编辑
docker-compose.yml
:version: "3.6" services: gitlab: environment: GITLAB_OMNIBUS_CONFIG: | gitlab_rails['packages_enabled'] = false
-
保存文件并重启极狐GitLab:
docker compose up -d
:::TabTitle Self-compiled (source)
-
编辑
/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
::EndTabs ## 更改存储路径
默认情况下,软件包存储在本地,但您可以更改默认本地位置,甚至使用对象存储。
更改本地存储路径
默认情况下,软件包存储在本地路径中,与极狐GitLab 安装方法相关:
- Omnibus:
/var/opt/gitlab/gitlab-rails/shared/packages/
- 源安装:
/home/git/gitlab/shared/packages/
要更改本地存储路径:
::Tabs
:::TabTitle Linux package (Omnibus)
-
编辑
/etc/gitlab/gitlab.rb
文件并添加以下内容:gitlab_rails['packages_storage_path'] = "/mnt/packages"
-
保存文件并重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
:::TabTitle Self-compiled (source)
-
编辑
/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
::EndTabs
如果您已有软件包存储在旧存储路径中,请将所有内容从旧路径移动到新路径,以确保现有软件包仍然可以访问:
mv /var/opt/gitlab/gitlab-rails/shared/packages/* /mnt/packages/
Docker 和 Kubernetes 不使用本地存储。
- 对于 Helm chart(Kubernetes)安装:改用对象存储。
- 对于 Docker 安装:
/var/opt/gitlab/
目录已经安装在主机上的目录中。无需更改容器内的本地存储路径。
使用对象存储
您可以使用对象存储来存储软件包,而不是依赖本地存储。
有关详细信息,请参阅如何使用统一对象存储设置。
将本地软件包迁移到对象存储
配置对象存储后,使用以下任务将现有软件包从本地存储迁移到远端存储。 进程在后台 worker 中完成,不需要停机时间。
-
迁移软件包。
::Tabs
:::TabTitle Linux package (Omnibus)
sudo gitlab-rake "gitlab:packages:migrate"
:::TabTitle Self-compiled (source)
RAILS_ENV=production sudo -u git -H bundle exec rake gitlab:packages:migrate
::EndTabs
-
使用 PostgreSQL 控制台追踪进度并验证所有的软件包都迁移成功。
::Tabs
:::TabTitle Linux package (Omnibus) 14.1 and earlier
sudo gitlab-rails dbconsole
:::TabTitle Linux package (Omnibus) 14.2 and later
sudo gitlab-rails dbconsole --database main
:::TabTitle Self-compiled (source)
RAILS_ENV=production sudo -u git -H psql -d gitlabhq_production
::EndTabs
-
使用如下 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
-
最后,验证在磁盘的
packages
目录下没有文件:::Tabs
:::TabTitle Linux package (Omnibus)
sudo find /var/opt/gitlab/gitlab-rails/shared/packages -type f | grep -v tmp | wc -l
:::TabTitle Self-compiled (source)
sudo -u git find /home/git/gitlab/shared/packages -type f | grep -v tmp | wc -l
::EndTabs