极狐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)

  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
    

:::TabTitle Helm chart (Kubernetes)

  1. 导出 Helm values:

    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
    

:::TabTitle 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
    

:::TabTitle 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
    

::EndTabs ## 更改存储路径

默认情况下,软件包存储在本地,但您可以更改默认本地位置,甚至使用对象存储。

更改本地存储路径

默认情况下,软件包存储在本地路径中,与极狐GitLab 安装方法相关:

  • Omnibus:/var/opt/gitlab/gitlab-rails/shared/packages/
  • 源安装:/home/git/gitlab/shared/packages/

要更改本地存储路径:

::Tabs

:::TabTitle Linux package (Omnibus)

  1. 编辑 /etc/gitlab/gitlab.rb 文件并添加以下内容:

    gitlab_rails['packages_storage_path'] = "/mnt/packages"
    
  2. 保存文件并重新配置极狐GitLab:

    sudo gitlab-ctl reconfigure
    

:::TabTitle 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
    

::EndTabs

如果您已有软件包存储在旧存储路径中,请将所有内容从旧路径移动到新路径,以确保现有软件包仍然可以访问:

mv /var/opt/gitlab/gitlab-rails/shared/packages/* /mnt/packages/

Docker 和 Kubernetes 不使用本地存储。

  • 对于 Helm chart(Kubernetes)安装:改用对象存储。
  • 对于 Docker 安装:/var/opt/gitlab/ 目录已经安装在主机上的目录中。无需更改容器内的本地存储路径。

使用对象存储

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

有关详细信息,请参阅如何使用统一对象存储设置

将本地软件包迁移到对象存储

配置对象存储后,使用以下任务将现有软件包从本地存储迁移到远端存储。 进程在后台 worker 中完成,不需要停机时间

  1. 迁移软件包。

    ::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

  2. 使用 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

  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 目录下没有文件:

    ::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