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

自定义群组级项目模板开发指南

本文档旨在帮助贡献者理解 自定义群组级项目模板 的代码设计。在为此功能修改代码之前,您应该阅读本文档。

本文档有意仅概述代码的设计方式,因为代码经常变化。要了解功能特定部分的工作原理,请查看代码和规范。这里的细节解释了模板功能主要组件的工作原理。

本文档中引用的代码库部分被更新、移除或添加新部分时,应更新本文档。

基本概述

自定义群组级项目模板是一个常规项目,它被导出然后导入到新创建的项目中。

假设我们有 Group1,其中包含名为 Subgroup1 的模板子群组。在 Subgroup1 中,我们有一个名为 Template1 的项目。User1 使用 Template1Group1 中创建 Project1,逻辑遵循以下步骤:

  1. 初始化 Project1
  2. 导出 Template1
  3. 导入到 Project1

业务逻辑

  • ProjectsController#create: 流程开始的控制器
    • 定义在 app/controllers/projects_controller.rb
  • Projects::CreateService: 处理项目的创建。
    • 定义在 app/services/projects/create_service.rb
  • EE::Projects::CreateService: 创建服务的 EE 扩展
    • 定义在 ee/app/services/ee/projects/create_service.rb
  • Projects::CreateFromTemplateService: 处理从自定义项目模板创建项目。
    • 定义在 app/services/projects/create_from_template_service.rb
  • EE:Projects::CreateFromTemplateService: 从模板创建服务的 EE 扩展。
    • 定义在 ee/app/services/ee/projects/create_from_template_service.rb
  • Projects::GitlabProjectsImportService: 处理模板的导入。
    • 定义在 app/services/projects/gitlab_projects_import_service.rb
  • EE::Projects::GitlabProjectsImportService: 导入服务的 EE 扩展。
    • 定义在 ee/app/services/ee/projects/gitlab_projects_import_service.rb
  • ProjectTemplateExportWorker: 处理自定义模板的导出。
    • 定义在 ee/app/workers/project_template_export_worker.rb
  • ProjectExportWorker: ProjectTemplateExportWorker 的基类。
    • 定义在 app/workers/project_export_worker.rb
  • Projects::ImportExport::ExportService: 导出项目的服务。
    • 定义在 app/workers/project_export_worker.rb
  • Gitlab::ImportExport::VersionSaver: 处理版本的导出。
    • 定义在 lib/gitlab/import_export/version_saver.rb
  • Gitlab::ImportExport::UploadsManager: 处理上传文件的导出。
    • 定义在 lib/gitlab/import_export/uploads_manager.rb
  • Gitlab::ImportExport::AvatarSaver: 导出头像。
    • 定义在 lib/gitlab/import_export/avatar_saver.rb
  • Gitlab::ImportExport::Project::TreeSaver: 导出项目和相关对象。
    • 定义在 lib/gitlab/import_export/project/tree_saver.rb
  • EE:Gitlab::ImportExport::Project::TreeSaver: 导出项目和相关对象。
    • 定义在 lib/gitlab/import_export/project/tree_saver.rb
  • Gitlab::ImportExport::Json::StreamingSerializer: 将导出的对象序列化为 JSON。
    • 定义在 lib/gitlab/import_export/json/streaming_serializer.rb
  • Gitlab::ImportExport::Reader: 围绕导出的 JSON 文件的包装器。
    • 定义在 lib/gitlab/import_export/reader.rb
  • Gitlab::ImportExport::AttributesFinder: 解析配置并在导出的 JSON 文件中查找属性。
    • 定义在 lib/gitlab/import_export/attributes_finder.rb
  • Gitlab::ImportExport::Config: 围绕导入/导出 YAML 配置文件的包装器。
    • 定义在 lib/gitlab/import_export/config.rb
  • Gitlab::ImportExport: 提供便捷方法的入口点。
    • 定义在 lib/gitlab/import_export.rb
  • Gitlab::ImportExport::UploadsSaver: 导出上传的文件。
    • 定义在 lib/gitlab/import_export/uploads_saver.rb
  • Gitlab::ImportExport::RepoSaver: 导出仓库。
    • 定义在 lib/gitlab/import_export/repo_saver.rb
  • Gitlab::ImportExport::WikiRepoSaver: 导出 wiki 仓库。
    • 定义在 lib/gitlab/import_export/wiki_repo_saver.rb
  • EE:Gitlab::ImportExport::WikiRepoSaver: 扩展 wiki 仓库保存器。
    • 定义在 ee/lib/ee/gitlab/import_export/wiki_repo_saver.rb
  • Gitlab::ImportExport::LfsSaver: 导出 LFS 对象和文件。
    • 定义在 lib/gitlab/import_export/lfs_saver.rb
  • Gitlab::ImportExport::SnippetsRepoSaver: 导出片段仓库
    • 定义在 lib/gitlab/import_export/snippet_repo_saver.rb
  • Gitlab::ImportExport::DesignRepoSaver: 导出设计仓库
    • 定义在 lib/gitlab/import_export/design_repo_saver.rb
  • Gitlab::ImportExport::Error: 自定义错误对象。
    • 定义在 lib/gitlab/import_export/error.rb
  • Import::AfterExportStrategies::AfterExportStrategyBuilder: 作为导出完成后运行的回调。
    • 定义在 lib/import/after_export_strategies/after_export_strategy_builder.rb
  • Gitlab::Export::Logger: 导出期间使用的日志记录器。
    • 定义在 lib/gitlab/export/logger.rb
  • Gitlab::ImportExport::LogUtil: 构建日志消息。
    • 定义在 lib/gitlab/import_export/log_util.rb
  • Import::AfterExportStrategies::CustomTemplateExportImportStrategy: 模板导出完成后导入模板的回调类。
    • 定义在 ee/lib/import/after_export_strategies/custom_template_export_import_strategy.rb
  • Gitlab::TemplateHelper: 导入模板的辅助方法。
    • 定义在 lib/gitlab/template_helper.rb
  • ImportExportUpload: 存储导入和导出归档文件。
    • 定义在 app/models/import_export_upload.rb
  • Import::AfterExportStrategies::BaseAfterExportStrategy: 导出后策略的基类。
    • 定义在 lib/import/after_export_strategies/base_after_export_strategy.rb
  • RepositoryImportWorker: 触发导入步骤的 worker。
    • 定义在 app/workers/repository_import_worker.rb
  • EE::RepositoryImportWorker: 仓库导入 worker 的扩展。
    • 定义在 ee/app/workers/ee/repository_import_worker.rb
  • Projects::ImportService: 执行导入步骤。
    • 定义在 app/services/projects/import_service.rb
  • EE:Projects::ImportService: 扩展导入服务。
    • 定义在 ee/app/services/ee/projects/import_service.rb
  • Projects::LfsPointers::LfsImportService: 导入 LFS 对象。
    • 定义在 app/services/projects/lfs_pointers/lfs_import_service.rb
  • Projects::LfsPointers::LfsObjectDownloadListService: 请求下载 LFS 对象链接的主要服务。
    • 定义在 app/services/projects/lfs_pointers/lfs_object_download_list_service.rb
  • Projects::LfsPointers::LfsDownloadLinkListService: 处理批量请求链接和构建列表。
    • 定义在 app/services/projects/lfs_pointers/lfs_download_link_list_service.rb
  • Projects::LfsPointers::LfsListService: 检索 LFS blob 指针。
    • 定义在 app/services/projects/lfs_pointers/lfs_list_service.rb
  • Projects::LfsPointers::LfsDownloadService: 下载并链接 LFS 对象。
    • 定义在 app/services/projects/lfs_pointers/lfs_download_service.rb
  • Gitlab::ImportSources: 配置使用哪个导入器的模块。
    • 定义在 lib/gitlab/import_sources.rb
  • EE::Gitlab::ImportSources: 扩展导入源。
    • 定义在 ee/lib/ee/gitlab/import_sources.rb
  • Gitlab::ImportExport::Importer: 导入器类。
    • 定义在 lib/gitlab/import_export/importer.rb
  • EE::Gitlab::ImportExport::Importer: 扩展导入器。
    • 定义在 ee/lib/ee/gitlab/import_export/importer.rb
  • Gitlab::ImportExport::FileImporter: 导入归档文件。
    • 定义在 lib/gitlab/import_export/file_importer.rb
  • Gitlab::ImportExport::DecompressedArchiveSizeValidator: 验证归档文件大小。
    • 定义在 lib/gitlab/import_export/decompressed_archive_size_validator.rb
  • Gitlab::ImportExport::VersionChecker: 验证导出版本是否与导入器匹配。
    • 定义在 lib/gitlab/import_export/version_checker.rb
  • Gitlab::ImportExport::Project::TreeRestorer: 处理项目和关联对象的导入。
    • 定义在 lib/gitlab/import_export/project/tree_restorer.rb
  • Gitlab::ImportExport::Json::NdjsonReader: JSON 导出文件的读取器。
    • 定义在 lib/gitlab/import_export/json/ndjson_reader.rb
  • Gitlab::ImportExport::AvatarRestorer: 处理头像文件的导入。
    • 定义在 lib/gitlab/import_export/avatar_restorer.rb
  • Gitlab::ImportExport::RepoRestorer: 处理仓库的导入。
    • 定义在 lib/gitlab/import_export/repo_restorer.rb
  • EE:Gitlab::ImportExport::RepoRestorer: 扩展仓库恢复器。
    • 定义在 ee/lib/ee/gitlab/import_export/repo_restorer.rb
  • Gitlab::ImportExport::DesignRepoRestorer: 处理设计仓库的恢复。
    • 定义在 lib/gitlab/import_export/design_repo_restorer.rb
  • Gitlab::ImportExport::UploadsRestorer: 处理上传文件的恢复。
    • 定义在 lib/gitlab/import_export/uploads_restorer.rb
  • Gitlab::ImportExport::LfsRestorer: 恢复 LFS 对象。
    • 定义在 lib/gitlab/import_export/lfs_restorer.rb
  • Gitlab::ImportExport::SnippetsRepoRestorer: 处理片段仓库的恢复。
    • 定义在 lib/gitlab/import_export/snippets_repo_restorer.rb
  • Gitlab::ImportExport::SnippetRepoRestorer: 处理单个片段的恢复。
    • 定义在 lib/gitlab/import_export/snippet_repo_restorer.rb
  • Snippets::RepositoryValidationService: 验证片段仓库归档。
    • 定义在 app/services/snippets/repository_validation_service.rb
  • Snippets::UpdateStatisticsService: 更新片段仓库的统计信息。
    • 定义在 app/services/snippets/update_statistics_service.rb
  • Gitlab::BackgroundMigration::BackfillSnippetRepositories: 填充哈希存储中缺失的片段。
    • 定义在 lib/gitlab/background_migration/backfill_snippet_repositories.rb
  • Gitlab::ImportExport::StatisticsRestorer: 刷新项目统计信息。
    • 定义在 lib/gitlab/import_export/importer.rb
  • Gitlab::ImportExport::Project::CustomTemplateRestorer: 处理自定义模板的额外导入。
    • 定义在 ee/lib/gitlab/import_export/project/custom_template_restorer.rb
  • Gitlab::ImportExport::Project::ProjectHooksRestorer: 处理项目钩子的导入。
    • 定义在 ee/lib/gitlab/import_export/project/project_hooks_restorer.rb
  • Gitlab::ImportExport::Project::DeployKeysRestorer: 处理部署密钥的导入。
    • 定义在 ee/lib/gitlab/import_export/project/deploy_keys_restorer.rb
  • Gitlab::ImportExport::Project::CustomTemplateRestorerHelper: 自定义模板恢复器的辅助方法。
    • 定义在 ee/lib/gitlab/import_export/project/custom_template_restorer_helper.rb