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 값들을 내보냅니다:

    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
    
Self-compiled (source)
  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/
  • Self-compiled (source): /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
    
Self-compiled (source)
  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/

도커와 쿠버네티스는 로컬 저장을 사용하지 않습니다.

  • Helm 차트 (Kubernetes)의 경우: 대신 객체 저장소를 사용합니다.
  • 도커의 경우: /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