GitLab 패키지 레지스트리 관리

Tier: Free, Premium, Ultimate Offering: Self-Managed

여러 일반적인 패키지 관리자를 위한 개인 리포지터리로 GitLab을 사용하려면 패키지 레지스트리를 사용하세요. 하위 프로젝트에서 의존성으로 사용될 수 있는 패키지를 빌드하고 게시할 수 있습니다.

지원되는 형식

패키지 레지스트리는 다음 형식을 지원합니다:

패키지 유형 GitLab 버전
Composer 13.2+
Conan 12.6+
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 Draft: Merge Request
Opkg #36894
P2 #36895
Puppet #36897
RPM #5932
RubyGems #803
SBT #36898
Terraform Draft: Merge Request
Vagrant #36899

요청 한도

하위 프로젝트에서 의존성으로 패키지를 다운로드할 때, 많은 요청이 패키지 API를 통해 이루어집니다. 따라서 사용자 및 IP 요청 한도에 도달할 수 있습니다. 이 문제를 해결하기 위해 패키지 API에 특정 요청 한도를 정의할 수 있습니다. 자세한 내용은 패키지 레지스트리 요청 한도를 참조하세요.

패키지 레지스트리 활성화 또는 비활성화

패키지 레지스트리는 기본적으로 활성화되어 있습니다. 비활성화하려면:

Linux 패키지 (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
    
Helm 차트 (Kubernetes)
  1. Helm 값(Values)을 내보내세요:

    helm get values gitlab > gitlab_values.yaml
    
  2. gitlab_values.yaml을 편집하세요:

    global:
      appConfig:
        packages:
          enabled: false
    
  3. 파일을 저장하고 새 값(values)을 적용하세요:

    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 패키지 (Omnibus): /var/opt/gitlab/gitlab-rails/shared/packages/
  • 직접 컴파일한 경우 (소스): /home/git/gitlab/shared/packages/

로컬 저장 경로를 변경하려면:

Linux 패키지 (Omnibus)
  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을 사용하는 시스템의 경우s
    sudo service gitlab restart
    

이전 저장 경로에 이미 패키지가 저장되어 있는 경우, 기존 패키지에 액세스할 수 있도록 모든 것을 이동하여 새 위치로 이동하십시오:

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

Docker 및 Kubernetes는 로컬 저장을 사용하지 않습니다.

  • Helm 차트 (Kubernetes)의 경우: 대신 개체 저장소를 사용합니다.
  • Docker의 경우: /var/opt/gitlab/ 디렉터리는 이미 호스트의 디렉터리에 마운트되어 있습니다. 컨테이너 내의 로컬 저장 경로를 변경할 필요가 없습니다.

개체 저장소 사용

로컬 저장에 의존하는 대신 개체 저장소를 사용하여 패키지를 저장할 수 있습니다.

자세한 내용은 통합된 개체 저장소 설정을 참조하세요.

로컬 패키지를 개체 저장소로 이전

개체 저장소를 구성한 후, 기존 패키지를 로컬 저장소에서 원격 저장소로 이전하는 다음 작업을 수행하십시오. 처리는 백그라운드 워커에서 이루어지며 다운타임이 필요하지 않습니다.

  1. 패키지를 이전합니다.

    Linux 패키지 (Omnibus)
    sudo gitlab-rake "gitlab:packages:migrate"
    
    직접 컴파일한 경우 (소스)
    RAILS_ENV=production sudo -u git -H bundle exec rake gitlab:packages:migrate
    
  2. 진행 상황을 추적하고 모든 패키지가 성공적으로 이전되었는지 확인하려면 PostgreSQL 콘솔을 사용합니다.

    Linux 패키지 (Omnibus) 14.1 이전
    sudo gitlab-rails dbconsole
    
    Linux 패키지 (Omnibus) 14.2 및 이후
    sudo gitlab-rails dbconsole --database main
    
    직접 컴파일한 경우 (소스)
    RAILS_ENV=production sudo -u git -H psql -d gitlabhq_production
    
  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 디렉터리에 디스크에 파일이 없는지 확인합니다:

    Linux 패키지 (Omnibus)
    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