Help us learn about your current experience with the documentation. Take the survey.
自定义群组级项目模板开发指南
本文档旨在帮助贡献者理解 自定义群组级项目模板 的代码设计。在为此功能修改代码之前,您应该阅读本文档。
本文档有意仅概述代码的设计方式,因为代码经常变化。要了解功能特定部分的工作原理,请查看代码和规范。这里的细节解释了模板功能主要组件的工作原理。
本文档中引用的代码库部分被更新、移除或添加新部分时,应更新本文档。
基本概述
自定义群组级项目模板是一个常规项目,它被导出然后导入到新创建的项目中。
假设我们有 Group1,其中包含名为 Subgroup1 的模板子群组。在 Subgroup1 中,我们有一个名为 Template1 的项目。User1 使用 Template1 在 Group1 中创建 Project1,逻辑遵循以下步骤:
- 初始化
Project1 - 导出
Template1 - 导入到
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。
- 定义在