테스트 프로젝트 가져오기

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

이 프로젝트를 GitLab 환경으로 가져 오는 방법은 다음과 같이 설명되어 있습니다. 권장 그룹 qa-perf-testing 및 프로젝트 gitlabhq이 설정되었다는 가정하에 설명되어 있습니다.

프로젝트 가져오기

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

UI를 사용하여 가져오기

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

  1. qa-perf-testing 그룹을 생성하십시오.
  2. GitLab FOSS 프로젝트 tarball을 그룹으로 가져옵니다.

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

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

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

performance 프로젝트에 제공되는 편리한 스크립트인 bin/import-project를 사용하여 API를 통해 프로젝트 tarball을 GitLab 환경으로 가져옵니다.

스크립트를 사용하려면 미리 몇 가지 준비가 필요합니다:

  1. 머신에 이미 설치되어 있지 않은 경우 RubyRuby Bundler를 설정하십시오.
  2. 다음으로 bundle install로 Bundler를 사용하여 필요한 Ruby Gems를 설치하십시오.

bin/import-project를 사용하는 방법에 대한 자세한 내용은 다음과 같이 실행하십시오:

bin/import-project --help

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

GitHub를 사용하여 가져오기

GitHub를 통해 프로젝트를 가져 오는 옵션도 있습니다.

  1. qa-perf-testing 그룹을 생성하십시오.
  2. UI를 통해 GitHub에 미러링된 GitLab FOSS 저장소를 그룹으로 가져오십시오.

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

GitHub Enterprise(GHE)에서 GitLab로 가져 오기를 테스트하려면 GHE 인스턴스가 필요합니다. GitHub Enterprise Server trial을 요청하여 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 주기의 수를 관찰합니다.

다음 스니펫을 사용할 수 있습니다: 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

액세스 토큰 설정

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

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

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