테스트 프로젝트 임포트
GitLab v19.4요약
테스트 목적으로 GitLab 자체 프로젝트인 GitLab CE(여기서는 gitlabhq)를 qa-perf-testing이라는 그룹 아래로 가져올 수 있습니다. 프로젝트를 GitLab 환경으로 가져오는 방법은 여러 가지입니다.
테스트 목적으로 GitLab 자체 프로젝트인 GitLab CE(여기서는 gitlabhq)를 qa-perf-testing이라는 그룹 아래로 가져올 수 있습니다. 테스트에 사용할 수 있는 프로젝트 tarball은 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 프로젝트에는 터미널에서 API를 통해 프로젝트 tarball을 GitLab 환경으로 가져오는 bin/import-project 스크립트가 함께 제공됩니다.
아직 준비하지 않았다면 이 스크립트를 사용하기 위한 사전 작업이 필요합니다.
- 먼저 머신에
Ruby와Ruby Bundler가 없다면 설치합니다. - 다음으로
bundle install로 Bundler를 통해 필요한 Ruby Gem을 설치합니다.
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 Platform 무료 체험판을 신청할 수 있습니다.
Rake 태스크로 가져오기#
Rake 태스크로 테스트 프로젝트를 가져오는 방법은 대용량 프로젝트 가져오기를 참고합니다.
Rails 콘솔로 가져오기#
마지막 방법은 Rails 콘솔로 프로젝트를 가져오는 것입니다.
-
Ruby on Rails 콘솔을 시작합니다.
# Omnibus GitLab gitlab-rails console # For installations from source 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 #Enable Request store 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 권한이 있어야 합니다.
각 테스트 유형에서 액세스 토큰을 사용하는 방법은 해당 테스트 문서에 정리되어 있습니다.