테스트 프로젝트 가져오기

테스트를 위해 GitLab CE 프로젝트(이 경우 gitlabhq라고 함)를 qa-perf-testing이라는 그룹에 가져올 수 있습니다. 테스트에 사용할 수있는 프로젝트 tarball은 performance-data 프로젝트에서 찾을 수 있습니다. 필요에 따라 다른 프로젝트를 사용할 수 있습니다.

해당하는 그룹 qa-perf-testing 및 프로젝트 gitlabhq가 설정 중이라고 가정하면 GitLab 환경으로 프로젝트를 가져오는 여러 가지 방법이 있습니다.

프로젝트 가져오기

테스트 프로젝트를 가져오기 위해 다음 중 하나의 방법을 사용하세요.

UI를 사용하여 가져오기

첫 번째 옵션은 GitLab UI를 사용하여 프로젝트 tarball 파일을 가져오는 것입니다:

  1. qa-perf-testing 그룹을 생성합니다.
  2. GitLab FOSS 프로젝트 tarball을 그룹에 가져옵니다.

프로젝트가 완전히 가져 오기까지 최대 15분이 소요될 수 있습니다. 현재 상태를 확인하려면 프로젝트의 주요 페이지로 이동할 수 있습니다.

이 방법은 모든 오류를 무시하며(특히 GITALY_DISABLE_REQUEST_LIMITS와 관련된 오류를 포함하여) GitLab 사용자가 사용합니다. 개발 및 테스트를 위해서는 아래의 다른 방법을 확인하세요.

import-project 스크립트 사용하여 가져오기

편리한 스크립트인 import-projectperformance 프로젝트와 함께 제공되어 터미널에서 GitLab 환경으로 프로젝트 tarball을 가져오도록 합니다.

스크립트를 사용하려면 먼저 머신에 RubyRuby Bundler가 이미 설치되어 있지 않다면 설정이 필요합니다.

bundle install로 Bundler를 통해 필요한 Ruby Gems를 설치하세요.

bin/import-project의 사용 방법에 대한 자세한 내용은 다음과 같습니다:

bin/import-project --help

프로젝트가 완전히 가져 오기까지 최대 15분이 소요될 수 있습니다. 스크립트는 주기적으로 상태를 확인하고 가져 오기가 완료되면 종료됩니다.

GitHub을 사용하여 가져오기

또한 GitHub을 통해 프로젝트를 가져오는 옵션이 있습니다:

  1. qa-perf-testing 그룹을 생성합니다.
  2. GitHub에서 mirror된 GitLab FOSS 리포지터리를 UI를 통해 그룹에 가져옵니다.

이 방법은 다른 방법보다 가져 오는 데 더 오랜 시간이 소요되며 여러 요인에 따라 다릅니다. 다른 방법을 사용하는 것이 좋습니다.

GitLab에서 GitHub Enterprise(GHE)로 가져오기 테스트를 하려면 GHE 인스턴스가 필요합니다. GitHub Enterprise Server 트라이얼을 요청하고 Google Cloud Platform에 설치할 수 있습니다.

Rake 작업을 사용하여 가져오기

Rake 작업을 사용하여 테스트 프로젝트를 가져오려면 크기가 큰 프로젝트 가져오기를 참조하세요.

Rails 콘솔을 사용하여 가져오기

마지막 옵션은 Rails 콘솔을 사용하여 프로젝트를 가져오는 것입니다:

  1. Ruby on Rails 콘솔을 시작합니다:

    # Omnibus GitLab
    gitlab-rails console
       
    # 소스에서 설치한 경우
    sudo -u git -H bundle exec rails console -e production
    
  2. 프로젝트를 만들고 Project::TreeRestorer를 실행합니다:

    shared_class = Struct.new(:export_path) do
      def error(message)
        raise message
      end
    end
       
    user = User.first
       
    shared = shared_class.new(path)
       
    project = Projects::CreateService.new(user, { name: name, namespace: user.namespace }).execute
    begin
      # 요청 리포지터리 활성화
      RequestStore.begin!
      Gitlab::ImportExport::Project::TreeRestorer.new(user: user, shared: shared, project: project).restore
    ensure
      RequestStore.end!
      RequestStore.clear!
    end
    
  3. 리포지터리가 필요한 경우 아래와 같이 복원할 수 있습니다:

    repo_path = File.join(shared.export_path, Gitlab::ImportExport.project_bundle_filename)
       
    Gitlab::ImportExport::RepoRestorer.new(path_to_bundle: repo_path,
                                           shared: shared,
                                           importable: project).restore
    

    모든 가져 오기 실패를 import_failures 데이터 테이블에 저장합니다.

    프로젝트 가져오기가 문제없이 완료되었는지 확인하려면 다음을 확인하세요:

    project.import_failures.all
    

성능 테스트

성능 테스트를 위해 다음을 수행해야 합니다:

  • 비교적 큰 프로젝트, gitlabhq를 가져옵니다. 이것이 좋은 예제가 될 것입니다.
  • Project::TreeRestorer의 실행 시간을 메트릭합니다.
  • 복원 중 실행된 SQL 쿼리 수를 계산합니다.
  • 발생하는 GC(Garbage Collection) 사이클 수를 관찰합니다.

다음 스니펫을 사용할 수 있습니다: https://gitlab.com/gitlab-org/gitlab/snippets/1924954 (로그인이 필요함). 이 스니펫은 프로젝트를 복원하고 Project::TreeRestorer의 실행 시간, SQL 쿼리 수 및 발생하는 GC 사이클 수를 메트릭합니다.

다음과 같이 gdk/gitlab 디렉터리에서 스크립트를 실행할 수 있습니다:

bundle exec rails r  /path_to_script/script.rb project_name /path_to_extracted_project request_store_enabled

Access 토큰 설정

많은 테스트는 여러 엔드포인트에서 자체 인증이 필요하기 때문에 GitLab 개인 액세스 토큰이 필요합니다.

GitLab 설명서에는 이 토큰을 생성하는 방법이 상세히 나와 있습니다. 테스트는 이 토큰이 관리자에 의해 생성되었으며 APIread_repository 권한을 갖고 있어야 합니다.

각 유형의 테스트에 액세스 토큰을 사용하는 방법에 대한 자세한 내용은 각각의 문서에서 찾을 수 있습니다.