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

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

통합 단계

다음 개요는 컴포넌트를 통합하는 다양한 단계의 예를 성숙도 측정 항목 이름을 재사용합니다. 이러한 단계는 구성 요소의 실제 성숙도에만 느슨하게 결합되어 있으며 구현 순서를 안내하기 위한 것입니다. 예를 들어, 컴포넌트가 기본적으로 활성화되지 않더라도 사랑받는(로블러블) 상태에 있어야만 하는 것은 아닙니다. 컴포넌트가 기본적으로 활성화된다고 해서 그 자체로 컴포넌트가 사랑받는 상태가 되는 것은 아닙니다.

새로운 컴포넌트 제안

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

컴포넌트가 속한 제품 범주를 식별하고 해당 범주의 담당 공학 관리자 및 제품 관리자를 지정합니다.

GitLab에서 제품의 제안부터 릴리스까지 어떻게 얻을 수 있는지에 대한 일반적인 단계는 제품 개발 흐름에서 찾을 수 있습니다.

새로운 서비스를 GitLab과 통합

새로운 서비스를 추가하는 것은 다른 기여와 마찬가지로 병합 요청 워크플로우를 따르며 같은 완료 기준을 충족해야 합니다. 게다가 다음을 수행해야 합니다.

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

첫 번째 이터레이션은 서비스를 외부에 설치한 컴포넌트로 연결하고 사용할 수 있도록 하는 것입니다. 이 경우 GitLab에서 서비스에 연결하거나 서비스로부터 연결을 허용하는 설정을 제공하는 것이 일반적입니다. 그리고 GitLab과 서비스를 설치하고 구성하는 방법에 대한 문서를 제공하는 것이 일반적입니다.

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

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

첫 번째 이터레이션은 gitlab.yml 구성을 통해 선택 가능하도록 하거나 기능 플래그를 통해 선택 가능하도록 하는 것입니다. 이러한 유형의 서비스의 경우 초기 통합의 일부로 GitLab과 서비스 그리고 해당 종속성을 번들로 제공하는 것이 종종 필요합니다.

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

GitLab에 서비스를 번들로 제공

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

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

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

개발 환경

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

표준 설치 방법

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

서비스 의존성 처리

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

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

릴리스 관리

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

여러 수준의 자동화로 GitLab 월간 릴리스에 구성 요소를 포함할 수 있습니다. 이러한 다른 수준에서 구성 요소를 릴리스에 포함하는 ​​요구 사항과 프로세스는 릴리스 문서에 자세히 설명되어 있습니다.

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

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