Help us learn about your current experience with the documentation. Take the survey.

测试导入项目

为了测试,我们可以在名为 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 脚本导入

performance 项目提供了一个便捷的脚本 bin/import-project,可以通过终端 API 将项目 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. 通过 UI 将 在 GitHub 上镜像的 GitLab FOSS 仓库导入到该组中。

此方法的导入时间比其他方法长,并且取决于多个因素。建议使用其他方法。

要测试从 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 权限。

有关如何在每种类型的测试中使用访问令牌的详细信息,请参阅各自的文档。