테스트 프로젝트 가져오기
테스트를 위해 우리는 GitLab CE 프로젝트(본 예시에서는 gitlabhq
라고 함)를 qa-perf-testing
이라는 그룹에 가져올 수 있습니다. 테스트에 사용할 수 있는 프로젝트 tarballs는 performance-data 프로젝트에서 찾을 수 있습니다. 필요에 따라 다른 프로젝트를 사용할 수 있습니다.
GitLab 환경으로 프로젝트를 가져오는 방법은 여러 가지가 있습니다. 권장 그룹 qa-perf-testing
과 프로젝트 gitlabhq
가 설정되고 있다고 가정합니다.
프로젝트 가져오기
아래의 방법 중 하나를 사용하여 테스트 프로젝트를 가져올 수 있습니다.
UI를 사용하여 가져오기
첫 번째 옵션은 GitLab UI를 사용하여 프로젝트 tarball 파일을 가져오는 것입니다:
-
qa-perf-testing
그룹을 생성합니다. - GitLab FOSS 프로젝트 tarball을 그룹에 가져옵니다.
프로젝트가 완전히 가져오기까지 최대 15분이 소요될 수 있습니다. 현재 상태를 확인하려면 프로젝트의 메인 페이지로 이동할 수 있습니다.
이 방법은 모든 오류를 무시하며(특히 GITALY_DISABLE_REQUEST_LIMITS
와 관련된 오류도) GitLab 사용자들에 의해 사용됩니다. 개발 및 테스트를 위해 다른 방법을 확인하세요.
import-project
스크립트를 사용하여 가져오기
performance 프로젝트에 제공되는 편리한 스크립트인 bin/import-project
를 사용하여 프로젝트 tarball을 터미널을 통해 GitLab 환경으로 가져올 수 있습니다.
이 스크립트를 사용하기 위해 몇 가지 준비가 필요합니다(이미 준비되어 있다면 포함하지 않아도 됩니다):
- 먼저, 머신에
Ruby
와Ruby Bundler
를 설치하거나 사용 가능하게 설정합니다. - 다음으로,
bundle install
을 통해 Bundler를 사용하여 필요한 Ruby Gems를 설치합니다.
bin/import-project
사용 방법에 대한 자세한 내용은 다음과 같습니다:
bin/import-project --help
프로젝트가 완전히 가져오기까지 최대 15분이 소요될 수 있습니다. 스크립트는 주기적으로 상태를 확인하고 가져오기가 완료된 후에 종료합니다.
GitHub를 사용하여 가져오기
GitHub를 통해 프로젝트를 가져오는 옵션도 있습니다:
-
qa-perf-testing
그룹을 생성합니다. - GitHub에 미러링된 GitLab FOSS 리포지토리를 UI를 통해 그룹에 가져옵니다.
이 방법은 다른 방법보다 가져오는 데 더 많은 시간이 소요되며 여러 요소에 따라 달라집니다. 다른 방법을 사용하는 것이 권장됩니다.
GitHub Enterprise(GHE)에서 GitLab로 가져오기를 테스트하려면 GHE 인스턴스가 필요합니다. GitHub Enterprise Server 체험판을 요청하고 Google Cloud Platform에 설치하세요.
- GitLab 팀 멤버들은 이를 위해 Sandbox Cloud Realm을 사용할 수 있습니다.
- 기타 사용자들은 Google Cloud Platforms 무료 체험판을 요청할 수 있습니다.
Rake 작업을 사용하여 가져오기
Rake 작업을 사용하여 테스트 프로젝트를 가져오려면 대용량 프로젝트 가져오기를 확인하세요.
Rails 콘솔을 사용하여 가져오기
마지막 옵션은 Rails 콘솔을 사용하여 프로젝트를 가져오는 것입니다:
-
Ruby on Rails 콘솔을 시작합니다:
# Omnibus GitLab gitlab-rails console # 소스에서 설치한 경우 sudo -u git -H bundle exec rails console -e production
-
프로젝트를 생성하고
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
-
레포지토리가 필요한 경우 다음을 사용하여 복원합니다:
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 문서에는 이 토큰을 생성하는 방법에 대한 자세한 내용이 있습니다. 테스트는 해당 토큰이 관리자에 의해 생성되었고 API
및 read_repository
권한이 있어야합니다.
각 종류의 테스트에 액세스 토큰을 사용하는 방법에 대한 자세한 내용은 해당 문서에서 찾을 수 있습니다.