GitLab에 새로운 서비스 컴포넌트 추가

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

통합 단계

다음 개요는 컴포넌트를 통합하는 다양한 단계의 예를 나타내기 위해 성숙도 메트릭 항목 명칭을 재사용합니다. 이러한 단계는 컴포넌트의 실제 성숙도와 느슨하게 결합되어 있으며, 구현 순서의 안내로 사용됩니다. 예를 들어, 컴포넌트가 기본적으로 활성화되어 있지 않아도 사랑스러울 수 있습니다. 기본적으로 활성화되는 것만으로는 컴포넌트를 사랑스럽게 만들지 않습니다.

새로운 컴포넌트 제안

GitLab에 새로운 컴포넌트를 통합하기 위한 초기 단계는 이슈 트래커에서 기능 제안을 생성하는 것으로 시작합니다.

컴포넌트가 속한 제품 범주를 식별하고, 해당 범주에 대한 책임을 지는 공학 매니저 및 제품 매니저를 지정합니다.

어떤 GitLab 기능이 제안에서 릴리즈까지 어떻게 진행되는지에 대한 일반적인 단계는 제품 개발 흐름에서 찾을 수 있습니다.

GitLab과의 새로운 서비스 통합

새로운 서비스를 추가하는 것은 다른 기여들과 마찬가지로 Merge Request 워크플로우를 따라야 하며, 동일한 완료 기준을 충족해야 합니다. 게다가, 다음을 준수해야 합니다.

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

첫 번째 반복 작업은 서비스를 외부에 설치한 컴포넌트로 사용하고 연결할 수 있는 기능을 추가하는 것입니다. 이는 종종 GitLab에서 서비스에 연결하거나 서비스에서 연결을 허용하는 설정을 제공하는 것을 포함합니다. 그리고 그 서비스를 GitLab과 함께 설치하고 구성하는 방법에 대한 문서를 제공하는 것을 포함합니다.

Elasticsearch는 이 방법으로 통합된 서비스의 예입니다. 기타 많은 서비스, 내부 프로젝트인 Gitaly 같은 서비스도 분리하여 설치한 대체제로 시작되었습니다.

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

첫 번째 반복 작업은 gitlab.yml 구성 또는 피처 플래그를 통해 선택하여 활성화하는 것입니다. 이러한 유형의 서비스의 경우 초기 통합의 일환으로 GitLab과 함께 서비스와 해당 의존성을 번들로 포함하는 것이 종종 필요합니다.

note
ActionCable은 이 방식으로 추가된 서비스의 예입니다.

GitLab과의 서비스 번들링

GitLab과 함께 제공되는 코드는 법률팀에서 승인한 라이선스를 사용해야 합니다. 기존 승인된 라이선스 디렉터리을 참조하십시오.

컴파일해야 하는 새로운 의존성을 추가할 때 배포 팀에 통보해야 합니다. 우리는 모든 지원되는 플랫폼에서 의존성을 컴파일할 수 있어야 합니다.

GitLab과 함께 번들로 제공될 새로운 서비스는 다음 환경에서 사용할 수 있어야 합니다.

개발 환경

새로운 서비스를 번들로 포함하는 첫 번째 단계는 협력과 피드백에 참여하기 위해 개발 환경에 제공하는 것입니다.

표준 설치 방법

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

서비스 의존성 처리

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

게다가, Omnibus 패키지나 클라우드 네이티브 이미지에서 사용되는 시스템 의존성은 의존성 업데이트 자동화에 추가되어야 합니다.

릴리스 관리

만약 서비스 컴포넌트가 월간 GitLab 릴리스와 함께 업데이트되거나 릴리스되어야 하는 경우, 해당 컴포넌트를 릴리스 도구 자동화에 추가해야 합니다. 이 프로젝트는 전달 그룹에서 유지보수합니다.

다양한 수준의 자동화가 GitLab 월간 릴리스에 컴포넌트를 포함하기 위해 이용가능합니다. 이러한 서로 다른 수준에서 컴포넌트를 릴리스에 포함하기 위한 요구 사항 및 프로세스에 대한 자세한 내용은 릴리스 문서에 상세히 나와 있습니다.

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

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