GitLab에 새로운 서비스 구성 요소 추가하기

GitLab 제품은 서로 통신하는 독립적인 시스템 프로세스로 구성된 여러 서비스 구성 요소로 구성됩니다. 이러한 서비스는 동일한 인스턴스에서 실행되거나 서로 다른 인스턴스에 분산될 수 있습니다. 기존 구성 요소 목록은 GitLab 아키텍처 개요에서 찾을 수 있습니다.

통합 단계

다음 개요는 구성 요소를 통합하는 다양한 단계의 예로서 성숙도 측정 항목을 재사용합니다. 이러한 단계는 실제 구성 요소의 성숙도와 느슨하게 결합되어 있으며 구현 순서를 안내하는 것을 목적으로 합니다. 예를 들어, 구성 요소가 기본적으로 사용 가능한 경우에만 Lovable한 것은 아닙니다. 기본적으로 사용 가능한 것 자체로만 구성 요소가 Lovable하다고 볼 수 없습니다.

새로운 구성 요소 제안

GitLab에 새로운 구성 요소를 통합하는 초기 단계는 이슈 트래커에 기능 제안을 만드는 것으로 시작합니다.

구성 요소가 속한 제품 카테고리를 식별하고 해당 카테고리의 담당 엔지니어링 매니저와 제품 매니저를 지정합니다.

GitLab 기능을 제안부터 릴리스까지 가져가는 일반적인 단계는 제품 개발 흐름에서 찾을 수 있습니다.

새로운 서비스를 GitLab과 통합하기

새로운 서비스 추가는 다른 기여와 마찬가지로 병합 요청 워크플로우를 따라야 하며, 동일한 완료 기준을 충족해야 합니다. 또한, 다음을 따라야 합니다:

  • 아키텍처 구성 요소 목록이 서비스를 포함하도록 업데이트되었습니다.
  • 구성 요소에서 제공하는 기능이 GitLab 제품 방향에 승인되었습니다.
  • 문서가 제공되었고 지원 팀이 새로운 구성 요소에 대해 알고 있습니다.

GitLab과 완전히 분리된 환경에서 작동할 수 있는 서비스의 경우:

첫 번째 반복 작업은 외부에 설치된 구성 요소로 연결하고 사용할 수 있게 하는 것입니다. 이는 종종 GitLab에서 서비스에 연결하거나 서비스로부터 연결을 허용하는 설정을 제공하는 것을 포함합니다. 그리고 GitLab과 서비스를 설치하고 구성하는 방법에 대한 문서를 제공하는 것을 의미합니다.

Elasticsearch는 이러한 방식으로 통합된 서비스의 예입니다. Gitaly와 같은 내부 프로젝트를 포함한 많은 다른 서비스도 처음에는 별도로 설치된 대체품으로 시작했습니다.

기존 GitLab 코드베이스에 의존하는 서비스의 경우:

첫 번째 반복 작업은 gitlab.yml 구성 또는 기능 플래그를 통해 선택적으로 사용 가능하게 하는 것입니다. 이러한 유형의 서비스의 경우, 초기 통합의 일환으로 GitLab과 서비스 및 해당 종속성을 묶음에 추가해야 하는 경우가 많습니다.

참고: ActionCable은 위와 같은 방식으로 추가된 서비스의 예입니다.

GitLab과 함께 서비스 묶기

GitLab과 함께 제공되는 코드는 법무팀이 승인한 라이선스를 사용해야 합니다. 기존 승인된 라이선스 목록을 참조하세요.

배포 팀에 새로운 컴파일이 필요한 의존성을 추가할 때 알려야 합니다. 지원되는 모든 플랫폼에서 해당 의존성을 컴파일할 수 있어야 합니다.

GitLab과 묶일 새로운 서비스는 다음 환경에서 사용 가능해야 합니다.

개발 환경

새로운 서비스를 묶는 첫 번째 단계는 협업 및 피드백에 참여하기 위해 개발 환경에서 이를 제공하는 것입니다.

표준 설치 방법

서비스가 최종 사용자나 GitLab.com을 위해 묶이려면 표준 설치 방법에 포함되어야 합니다.

서비스 종속성 처리

의존성은 보안 업데이트를 추적하고 최신 상태로 유지해야 합니다. Rails 코드베이스의 경우, JavaScript 및 Ruby 의존성은 GitLab 의존성 스캐닝을 사용하여 취약점이 검색됩니다.

또한 Omnibus 패키지나 Cloud Native 이미지에서 사용되는 모든 시스템 의존성은 의존성 업데이트 자동화에 추가되어야 합니다.

릴리스 관리

서비스 구성 요소가 월간 GitLab 릴리스와 함께 업데이트되거나 릴리스되어야 하는 경우, 해당 서비스를 릴리스 도구 자동화에 추가해야 합니다. 이 프로젝트는 배포 그룹에서 유지 관리됩니다.

다양한 수준의 자동화를 사용하여 GitLab 월간 릴리스에 구성 요소를 포함할 수 있습니다. 이러한 각 수준에서 구성 요소를 릴리스에 포함하는 요구 사항 및 프로세스는 릴리스 문서에 자세히 안내되어 있습니다.

릴리스 도구에 의해 관리되는 프로젝트 목록은 릴리스 도구 프로젝트 디렉터리에서 찾을 수 있습니다.

예를 들어, Gitaly, GitLab Workhorse, GitLab Shell 등의 원하는 버전은 다양한 릴리스 파이프라인을 통해 동기화되어야 합니다.