Help us learn about your current experience with the documentation. Take the survey.

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 定义特定的速率限制。更多详情,请参阅软件包库速率限制

启用或禁用软件包库

软件包库默认启用。如需禁用它:

  1. 编辑 /etc/gitlab/gitlab.rb

    # 更改为 true 以启用软件包 - 如果未定义则默认启用
    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:

    # 对于运行 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/

要更改本地存储路径:

  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:

    # 对于运行 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/ 目录已挂载到主机上的 某个目录中。无需更改容器内的本地存储路径。

使用对象存储

您可以不依赖本地存储,而是使用对象存储来存储 软件包。

更多信息,请参阅如何使用 统一对象存储设置

在对象存储和本地存储之间迁移软件包

配置对象存储后,您可以使用以下任务在本地和远程存储之间迁移软件包。处理过程由后台工作程序完成,无需停机

迁移到对象存储

  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