Custom group-level project templates 개발 지침

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

이 문서는 코드가 자주 변경될 수 있기 때문에 코드 설계에 대한 개요로 의도적으로 제한되어 있습니다. 특정 기능이 작동하는 방법을 이해하려면 코드와 스펙을 확인해야 합니다. 여기에 설명된 세부 정보는 템플릿 기능의 주요 컴포넌트가 작동하는 방식을 설명합니다.

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

기본 개요

사용자 그룹 수준 프로젝트 템플릿은 일반 프로젝트를 내보내어 새로 생성된 프로젝트로 가져온 것입니다.

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에 정의됨.

<…이하 생략…>