테스트 프로젝트 가져오기

테스트를 위해 우리는 GitLab CE 프로젝트(본 예시에서는 gitlabhq라고 함)를 qa-perf-testing이라는 그룹에 가져올 수 있습니다. 테스트에 사용할 수 있는 프로젝트 tarballs는 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를 사용하여 프로젝트 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. GitHub에 미러링된 GitLab FOSS 리포지토리를 UI를 통해 그룹에 가져옵니다.

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

GitHub Enterprise(GHE)에서 GitLab로 가져오기를 테스트하려면 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 주기의 수를 관찰해야합니다.

이 스니펫을 사용할 수 있습니다: 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 권한이 있어야합니다.

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