テストインポートプロジェクト
テストのために、qa-perf-testing
というグループの下にGitLab CEプロジェクト(ここではgitlabhq
という名前)をインポートすることができます。テストに使えるプロジェクトの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
スクリプトを使ったインポート
ターミナルから API を使って GitLab 環境にプロジェクトの tarball をインポートするための便利なスクリプトbin/import-project
がパフォーマンスプロジェクトで提供されています。
このスクリプトを使うには、いくつかの準備が必要です:
- まず、
Ruby
とRuby Bundler
がマシンになければ、セットアップしてください。 - 次に、必要な Ruby Gems を Bundler 経由で
bundle install
にインストールします。
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 # 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
の権限を持っていることが必要です。
それぞれのテストでアクセストークンを使う方法の詳細は、それぞれのドキュメントを参照ください。