テストインポートプロジェクト

テストのために、qa-perf-testing というグループの下にGitLab CEプロジェクト(ここではgitlabhq という名前)をインポートすることができます。テストに使えるプロジェクトの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 スクリプトを使ったインポート

ターミナルから API を使って GitLab 環境にプロジェクトの tarball をインポートするための便利なスクリプトbin/import-projectパフォーマンスプロジェクトで提供されています。

このスクリプトを使うには、いくつかの準備が必要です:

  1. まず、RubyRuby Bundler がマシンになければ、セットアップしてください。
  2. 次に、必要な Ruby Gems を Bundler 経由でbundle install にインストールします。

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
       
    # For installations from source
    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
      #Enable Request store
      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 の権限を持っていることが必要です。

それぞれのテストでアクセストークンを使う方法の詳細は、それぞれのドキュメントを参照ください。