GitLab 패키지 레지스트리 관리

Tier: Free, Premium, Ultimate

Offering: Self-Managed

GitLab을 일반적인 패키지 관리자로 사용하려면 패키지 레지스트리를 사용하세요. 여러 가지 일반적인 패키지 관리자의 개인 리포지터리로 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 임시: Merge Request
Opkg #36894
P2 #36895
Puppet #36897
RPM #5932
RubyGems #803
SBT #36898
Terraform 임시: Merge Request
Vagrant #36899

요청 속도 제한

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

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

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

Linux 패키지 (Omnibus)
  1. /etc/gitlab/gitlab.rb 파일을 편집합니다:

    # 패키지를 활성화하려면 true로 변경합니다. 정의되지 않으면 기본적으로 활성화됩니다.
    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. 파일을 저장하고 새 값들을 적용합니다:

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

객체 리포지터리 사용

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

자세한 정보는 통합 객체 리포지터리 설정을 참조하세요.

로컬 패키지를 객체 리포지터리로 이전

객체 리포지터리를 구성한 후, 기존 패키지를 로컬 리포지터리에서 원격 리포지터리로 이전하는 다음 작업을 수행합니다. 처리는 백그라운드 워커에서 수행되며 다운타임이 필요하지 않습니다.

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

    Linux 패키지 (Omnibus)
    sudo gitlab-rake "gitlab:packages:migrate"
    
    Self-compiled (소스)
    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
    
    Self-compiled (소스)
    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
    
    Self-compiled (소스)
    sudo -u git find /home/git/gitlab/shared/packages -type f | grep -v tmp | wc -l