병합 요청 차이점 저장

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

병합 요청 차이점은 병합 요청과 연관된 차이의 크기 제한된 사본들입니다. 병합 요청을 보는 경우, 성능 최적화를 위해 가능한 경우에는 차이점이 이러한 사본들에서 가져옵니다.

기본적으로 병합 요청 차이점은 데이터베이스의 merge_request_diff_files 테이블에 저장됩니다. 더 큰 설치에서는 이 테이블이 너무 커지는 것을 발견할 수 있으며, 이 경우 외부 저장소로 전환하는 것이 권장됩니다.

병합 요청 차이점은 디스크에 또는 객체 저장소에 저장할 수 있습니다. 일반적으로, 차이점을 데이터베이스에 디스크에 저장하는 것이 더 나은데, 데이터베이스 밖에 오래된 차이점만 저장하는 대안이 있습니다.

외부 저장소 사용

Linux 패키지 (Omnibus)
  1. /etc/gitlab/gitlab.rb를 편집하고 다음 줄을 추가합니다:

    gitlab_rails['external_diffs_enabled'] = true
    
  2. 외부 차이점은 /var/opt/gitlab/gitlab-rails/shared/external-diffs에 저장됩니다. 경로를 변경하려면, 예를 들어 /mnt/storage/external-diffs로 변경하려면, /etc/gitlab/gitlab.rb를 편집하고 다음 줄을 추가합니다:

    gitlab_rails['external_diffs_storage_path'] = "/mnt/storage/external-diffs"
    
  3. 파일을 저장하고 변경 사항이 적용되도록 GitLab를 재구성합니다. 그러면 GitLab이 기존의 병합 요청 차이점을 외부 저장소로 이동합니다.

자체 컴파일(소스)
  1. /home/git/gitlab/config/gitlab.yml을 편집하고 다음 줄을 추가하거나 수정합니다:

    external_diffs:
      enabled: true
    
  2. 외부 차이점은 /home/git/gitlab/shared/external-diffs에 저장됩니다. 경로를 변경하려면, 예를 들어 /mnt/storage/external-diffs로 변경하려면, /home/git/gitlab/config/gitlab.yml을 편집하고 다음 줄을 추가하거나 수정합니다:

    external_diffs:
      enabled: true
      storage_path: /mnt/storage/external-diffs
    
  3. 파일을 저장하고 변경 사항이 적용되도록 GitLab를 다시 시작합니다. 그러면 GitLab이 기존의 병합 요청 차이점을 외부 저장소로 이동합니다.

객체 저장소 사용

경고: 객체 저장소로 마이그레이션하는 것은 되돌릴 수 없습니다.

디스크에 외부 차이점을 저장하는 대신, AWS S3와 같은 객체 저장소의 사용이 권장됩니다. 이 구성은 이미 유효한 AWS 자격 증명에 의존합니다.

Linux 패키지 (Omnibus)
  1. /etc/gitlab/gitlab.rb를 편집하고 다음 줄을 추가합니다:

    gitlab_rails['external_diffs_enabled'] = true
    
  2. 객체 저장소 설정을 지정합니다.
  3. 파일을 저장하고 변경 사항이 적용되도록 GitLab를 재구성합니다. 그러면 GitLab이 기존의 병합 요청 차이점을 외부 저장소로 이동합니다.
자체 컴파일(소스)
  1. /home/git/gitlab/config/gitlab.yml을 편집하고 다음 줄을 추가하거나 수정합니다:

    external_diffs:
      enabled: true
    
  2. 객체 저장소 설정을 지정합니다.
  3. 파일을 저장하고 변경 사항이 적용되도록 GitLab를 다시 시작합니다. 그러면 GitLab이 기존의 병합 요청 차이점을 외부 저장소로 이동합니다.

GitLab에서 GitLab과 함께 객체 저장소 사용에 대해 자세히 알아보기.

객체 저장소 설정

GitLab 13.2 이상에서는 통합된 객체 저장소 설정을 사용해야 합니다. 이 부분은 이전의 구성 형식을 설명합니다.

자체 컴파일 설치의 경우, 이러한 설정은 external_diffs: 하위에 있고, 그 다음으로 object_store: 아래에 있습니다. Linux 패키지 설치의 경우, external_diffs_object_store_로 시작합니다.

설정 설명 기본값
enabled 객체 저장소 사용/비사용 설정 false
remote_directory 외부 차이점이 저장된 버킷 이름  
proxy_download 모든 파일 서비스를 프록시화하는 것을 가능하게 하려면 true로 설정합니다. 이 옵션을 통해 모든 데이터를 프록시화하는 대신 클라이언트가 원격 저장소에서 직접 다운로드할 수 있도록 함으로써 외부 트래픽을 감소시킬 수 있습니다. false
connection 아래에 설명된 다양한 연결 옵션  

S3 호환 연결 설정

다양한 제공업체에 대한 사용 가능한 연결 설정은 여기를 확인하세요.

리눅스 패키지 (Omnibus)
  1. /etc/gitlab/gitlab.rb 파일을 편집하고 원하는 값을 대체하여 다음 라인을 추가하세요:

    gitlab_rails['external_diffs_enabled'] = true
    gitlab_rails['external_diffs_object_store_enabled'] = true
    gitlab_rails['external_diffs_object_store_remote_directory'] = "external-diffs"
    gitlab_rails['external_diffs_object_store_connection'] = {
      'provider' => 'AWS',
      'region' => 'eu-central-1',
      'aws_access_key_id' => 'AWS_ACCESS_KEY_ID',
      'aws_secret_access_key' => 'AWS_SECRET_ACCESS_KEY'
    }
    

    AWS IAM 프로파일을 사용하는 경우 AWS 액세스 키 및 시크릿 액세스 키/값 쌍을 생략하세요. 예를 들어:

    gitlab_rails['external_diffs_object_store_connection'] = {
      'provider' => 'AWS',
      'region' => 'eu-central-1',
      'use_iam_profile' => true
    }
    
  2. 변경 사항이 적용되려면 파일을 저장하고 GitLab을 다시 구성하세요.

자체 컴파일 (소스)
  1. /home/git/gitlab/config/gitlab.yml 파일을 편집하고 다음 라인을 추가하거나 수정하세요:

    external_diffs:
      enabled: true
      object_store:
        enabled: true
        remote_directory: "external-diffs" # 버킷 이름
        connection:
          provider: AWS # 현재 AWS만 지원됨
          aws_access_key_id: AWS_ACCESS_KEY_ID
          aws_secret_access_key: AWS_SECRET_ACCESS_KEY
          region: eu-central-1
    
  2. 변경 사항이 적용되려면 파일을 저장하고 GitLab을 다시 시작하세요.

대체 인-데이터베이스 저장소

외부 차이점을 활성화하면 병합 요청의 성능이 감소할 수 있으며, 다른 데이터와 별도의 작업에서 검색해야 합니다. 현재 변경된 diffs만 외부적으로 저장하고 현재 diffs를 데이터베이스에 유지함으로써 균형을 유지할 수 있습니다.

이 기능을 활성화하려면 다음 단계를 수행하세요:

리눅스 패키지 (Omnibus)
  1. /etc/gitlab/gitlab.rb 파일을 편집하고 다음 라인을 추가하세요:

    gitlab_rails['external_diffs_when'] = 'outdated'
    
  2. 변경 사항이 적용되려면 파일을 저장하고 GitLab을 다시 구성하세요.

자체 컴파일 (소스)
  1. /home/git/gitlab/config/gitlab.yml 파일을 편집하고 다음 라인을 추가하거나 수정하세요:

    external_diffs:
      enabled: true
      when: outdated
    
  2. 변경 사항이 적용되려면 파일을 저장하고 GitLab을 다시 시작하세요.

이 기능을 활성화하면 diffs가 처음에는 데이터베이스에 저장되고 외부로 이동됩니다. 다음 중 하나라도 해당될 때 외부 저장소로 이동됩니다:

  • 병합 요청 diffs의 새로운 버전이 존재하는 경우
  • 병합 요청이 7일 이상 전에 병합되었을 경우
  • 병합 요청이 7일 이상 전에 닫혔을 경우

이 규칙은 데이터베이스에 자주 액세스되는 diffs만을 저장함으로써 공간과 성능 사이의 균형을 유지합니다. 덜 자주 액세스되는 diffs는 데이터베이스 대신 외부 저장소로 이동됩니다.

외부 저장소에서 객체 저장소로 전환

자동 마이그레이션은 데이터베이스에 저장된 diffs를 이동하지만, 스토리지 유형 간에 diffs를 이동시키지는 않습니다. 외부 저장소에서 객체 저장소로 전환하려면 다음 작업을 수행하세요:

  1. 로컬 또는 NFS 저장소에 저장된 파일을 수동으로 객체 저장소로 이동하세요.
  2. 데이터베이스에서 해당 위치를 변경하려면 다음 Rake 작업을 실행하세요.

    리눅스 패키지 설치의 경우:

    sudo gitlab-rake gitlab:external_diffs:force_object_storage
    

    자체 컴파일 설치의 경우:

    sudo -u git -H bundle exec rake gitlab:external_diffs:force_object_storage RAILS_ENV=production
    

    기본적으로 sudo는 기존 환경 변수를 유지하지 않습니다. 기존 환경 변수를 접두어(prefix)로 사용하는 대신에 이어붙이세요(append).

    sudo gitlab-rake gitlab:external_diffs:force_object_storage START_ID=59946109 END_ID=59946109 UPDATE_DELAY=5
    

이러한 환경 변수는 Rake 작업의 동작을 수정합니다:

이름 기본값 목적
ANSI true 출력을 이해하기 쉽게 만들기 위해 ANSI 이스케이프 코드를 사용합니다.
BATCH_SIZE 1000 이 크기의 일괄처리로 테이블을 반복합니다.
START_ID nil 설정한 경우, 이 ID에서 스캔을 시작합니다.
END_ID nil 설정한 경우, 이 ID에서 스캔을 중지합니다.
UPDATE_DELAY 1 업데이트 사이에 잠들 시간(초)