사용자 지정 그룹 수준 프로젝트 템플릿 개발 지침

이 문서는 사용자 정의 그룹 수준 프로젝트 템플릿의 코드 디자인을 이해하는 데 도움을 주기 위해 작성되었습니다. 이 기능의 코드를 변경하기 전에 이 문서를 읽어야 합니다.

이 문서는 코드가 자주 변경될 수 있기 때문에 코드 디자인에 대한 개요로 제한되어 있습니다. 특정 기능이 작동하는 방식을 이해하려면 코드와 스펙을 확인해야 합니다. 여기서의 세부 정보는 템플릿 기능의 주요 구성 요소가 어떻게 작동하는지 설명합니다.

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

기본 개요

사용자 정의 그룹 수준 프로젝트 템플릿은 보통의 프로젝트가 내보내어져 새로 생성된 프로젝트로 가져오는 것입니다.

우리에게는 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: 생성 서비스의 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: 프로젝트와 관련 객체를 내보내는 EE 확장
    • lib/gitlab/import_export/project/tree_saver.rb에 정의됨.
  • Gitlab::ImportExport::Json::StreamingSerializer: 내보낸 객체를 JSON으로 직렬화
    • lib/gitlab/import_export/json/streaming_serializer.rb에 정의됨.