맞춤형 그룹 수준 프로젝트 템플릿 개발 지침

이 문서는 기여자들이 맞춤형 그룹 수준 프로젝트 템플릿의 코드 설계를 이해하는 데 도움을 주기 위해 작성되었습니다.

이 기능의 코드에 변경을 가하기 전에 이 문서를 읽어야 합니다.

이 문서는 코드가 자주 변경될 수 있음을 감안하여 코드 설계의 개요로 intentionally 제한되어 있습니다.

기능의 특정 부분이 어떻게 작동하는지 이해하려면 코드를 보고 사양을 참조하세요.

여기에서는 템플릿 기능의 주요 구성 요소가 어떻게 작동하는지 설명합니다.

note
이 문서는 이 문서에 참조된 코드베이스의 일부가 업데이트되거나 제거되거나 새로운 부분이 추가될 때 업데이트되어야 합니다.

기본 개요

맞춤형 그룹 수준 프로젝트 템플릿은 내보내진 후 새로 생성된 프로젝트로 가져오는 일반 프로젝트입니다.

Group1이 있어 이 그룹에는 Subgroup1이라는 템플릿 하위 그룹이 포함되어 있습니다.

Subgroup1 내에는 Template1이라는 프로젝트가 있습니다.

User1Template1을 사용하여 Group1 내에 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: create 서비스의 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: 위키 저장소를 내보냅니다.
    • lib/gitlab/import_export/wiki_repo_saver.rb에 정의됨.
  • EE:Gitlab::ImportExport::WikiRepoSaver: 위키 저장소 내보내기를 확장합니다.
    • 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에 정의됨.
  • Gitlab::ImportExport::AfterExportStrategyBuilder: 내보내기 완료 후 실행되는 콜백 역할을 합니다.
    • lib/gitlab/import_export/after_export_strategy_builder.rb에 정의됨.
  • Gitlab::Export::Logger: 내보내기 중 사용되는 로거입니다.
    • lib/gitlab/export/logger.rb에 정의됨.
  • Gitlab::ImportExport::LogUtil: 로그 메시지를 생성합니다.
    • lib/gitlab/import_export/log_util.rb에 정의됨.
  • Gitlab::ImportExport::AfterExportStrategies::CustomTemplateExportImportStrategy: 템플릿이 내보낸 후 가져오기 위한 콜백 클래스입니다.
    • ee/lib/ee/gitlab/import_export/after_export_strategies/custom_template_export_import_strategy.rb에 정의됨.
  • Gitlab::TemplateHelper: 템플릿 가져오기에 대한 헬퍼입니다.
    • lib/gitlab/template_helper.rb에 정의됨.
  • ImportExportUpload: 가져오기 및 내보내기 아카이브 파일을 저장합니다.
    • app/models/import_export_upload.rb에 정의됨.
  • Gitlab::ImportExport::AfterExportStrategies::BaseAfterExportStrategy: 기본 내보내기 후 전략입니다.
    • lib/gitlab/import_export/after_export_strategies/base_after_export_strategy.rb에 정의됨.
  • RepositoryImportWorker: 가져오기 단계를 트리거하는 워커입니다.
    • app/workers/repository_import_worker.rb에 정의됨.
  • EE::RepositoryImportWorker: 리포지토리 가져오기 워커의 확장입니다.
    • 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 블롭 포인터를 검색합니다.
    • 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에 정의됨.