커스텀 그룹 레벨 프로젝트 템플릿 개발 지침

이 문서는 기여자들이 커스텀 그룹 레벨 프로젝트 템플릿의 코드 디자인을 이해하는 데 도움을 주기 위해 작성되었습니다. 이 기능의 코드를 변경하기 전에 이 문서를 읽어야 합니다.

이 문서는 목적지 브랜치로의 변경 사항을 통합하기 위한 제안입니다.

::: 경고 이 문서는 코드가 자주 변경되기 때문에 코드가 어떻게 작동하는지 이해하기 위해, 코드와 스펙을 봐야 합니다. 여기에는 템플릿 기능의 주요 컴포넌트가 어떻게 작동하는지에 대한 설명이 있습니다.

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

기본 개요

커스텀 그룹 레벨 프로젝트 템플릿은 보통의 프로젝트를 내보내고(import) 새로 생성된 프로젝트로 가져옵니다.

Group1Subgroup1이라고 불리는 템플릿 하위 그룹이 포함되어 있는 경우를 가정해보겠습니다. 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: 프로젝트 생성을 위한 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 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: 어떤 import를 사용할지 구성하기 위한 모듈
    • lib/gitlab/import_sources.rb에 정의됨
  • EE::Gitlab::ImportSources: import sources 확장
    • ee/lib/ee/gitlab/import_sources.rb에 정의됨
  • Gitlab::ImportExport::Importer: Importer 클래스
    • lib/gitlab/import_export/importer.rb에 정의됨
  • EE::Gitlab::ImportExport::Importer: 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에 정의됨