Helm 차트 개발에 기여하기

기여 정책은 CONTRIBUTING.md에서 찾을 수 있습니다.

차트에 대한 문서 변경에 기여하려면 텍스트 편집기만 필요합니다. 문서는 doc/ 디렉토리에 저장되어 있습니다.

아키텍처

개발을 시작하기 전에 차트의 목표, 아키텍처, 설계 결정을 검토하는 것이 도움이 됩니다.

이 정보는 GitLab Helm 차트의 아키텍처를 참조하세요.

환경 설정

차트 개발을 위해 개발 환경을 설정하는 방법은 개발 환경 설정하기를 참조하세요.

스타일 가이드

차트 개발에 대한 가이드 및 모범 사례는 차트 개발 스타일 가이드를 참조하세요.

테스트 작성 및 실행

차트가 의도한 대로 작동하는지 검증하기 위해 여러 유형의 테스트를 실행합니다.

RSpec 테스트 개발

유닛 테스트는 RSpec으로 작성되며 차트 저장소의 spec/ 디렉토리에 저장됩니다.

차트의 기능을 검증하려면 RSpec 테스트 작성을 참조하세요.

Bats 테스트 개발

쉘 스크립트의 함수에 대한 유닛 테스트는 bats로 작성되며 차트 저장소의 scripts/ 디렉토리에 해당 스크립트 파일 옆에 저장됩니다.

이 프로젝트에서 사용되는 스크립트의 함수를 검증하려면 Bats 테스트 작성을 참조하세요.

GitLab QA 실행

GitLab QA를 사용하여 배포된 클라우드 네이티브 GitLab 설치에 대한 통합 및 기능 테스트를 실행할 수 있습니다.

GitLab QA 차트 문서에서 자세히 알아보세요.

ChaosKube

ChaosKube를 사용하여 고가용성 클라우드 네이티브 GitLab 설치의 내고장성을 테스트할 수 있습니다.

ChaosKube 차트 문서에서 자세히 알아보세요.

ClickHouse

GitLab과 외부 ClickHouse 서버를 구성하기 위한 지침입니다.

버전 및 릴리스

버전 구성, 브랜치 및 태그에 대한 자세한 내용은 릴리스 문서를 참조하세요.

변경 로그 항목

모든 CHANGELOG.md 항목은 변경 로그 항목 작업 흐름을 통해 생성되어야 합니다.

파이프라인

GitLab CI 파이프라인은 다음과 같은 파이프라인에서 실행됩니다:

  • 병합 요청
  • 기본 브랜치
  • 안정적인 브랜치
  • 태그

이러한 CI 파이프라인의 구성은 다음 위치에서 관리됩니다:

리뷰 앱

CI에서 리뷰 앱을 사용하여 Helm 차트의 실행 인스턴스를 배포하고 그에 대한 테스트를 실행합니다.

이 리뷰 앱은 EKS 및 GKE 클러스터에 배포되어 Helm 릴리스가 성공적으로 생성되는지 확인한 후 GitLab QA 및 기타 RSpec 테스트를 실행합니다.

특히 병합 요청의 경우, 우리는 vcluster를 사용하여 단시간 클러스터를 생성합니다. 이를 통해 구성의 간편성 및 외부 DNS 또는 Cert Manager 종속성이 포함되지 않은 단순화된 환경으로 인해 Kubernetes의 더 빠른 새 버전에 대한 테스트를 수행할 수 있습니다. 이 경우, Helm 차트를 간단히 배포하고 릴리스가 성공적으로 생성되고 Webservice가 Ready 상태에 있는지 확인합니다. 이 접근 방식은 Kubernetes 준비 프로브를 활용하여 애플리케이션이 건강한 상태에 있는지를 보장합니다. vcluster 구현 계획에 대한 자세한 내용은 이슈 5013를 참조하세요.

리뷰 앱 관리

리뷰 앱은 기본적으로 두 시간 동안 활성 상태로 유지되다가 연결된 CI 작업에 의해 자동으로 중지됩니다. 이 프로세스는 다음과 같이 작동합니다:

  1. create_review_* 작업은 리뷰 앱 환경을 생성합니다.
    • 이러한 작업은 환경 정보를 echo만 합니다. 이렇게 함으로써 작업이 실패하지 않고 환경을 일관적으로 생성하여 미래의 CI 작업에 의해 자동으로 중지되지 않는 불안정한 상태로 남지 않도록 합니다.
  2. review_* 작업은 환경에 Helm 차트를 설치합니다.
  3. stop_review_* 작업은 변수 REVIEW_APPS_AUTO_STOP_IN에서 정의된 기간 후에 실행됩니다.

하나 이상의 review_* 작업이 실패했거나 환경을 디버그해야 하는 경우 다음을 수행할 수 있습니다:

  1. 관련된 create_review_* 작업을 찾으세요.
  2. 작업 페이지 상단에서 <cluster>/<commit>와 같은 제목의 환경 링크를 찾으세요.
  3. 환경 페이지의 오른쪽 상단에 환경을 다음과 같이 찾을 수 있습니다:
    • 환경 고정: 핀 모양 아이콘이 표시되는 이 버튼을 클릭하면 환경이 자동으로 중지되지 않도록 설정됩니다. 이를 클릭하면 stop_review_* 작업이 취소됩니다. 디버그를 완료하면 해당 작업을 수동으로 실행해야 합니다. 실패한 환경을 디버그하는 데 더 많은 시간이 필요할 경우 이 옵션이 유용합니다.
    • 배포 보기: 이 버튼을 클릭하면 GitLab의 실행 인스턴스의 환경 URL이 열립니다.
    • 중지: 이 버튼을 클릭하면 연관된 stop_review_* 작업이 실행됩니다.

상위 차트를 Fork해야 하는 시점

변경 사항이 없는 경우 Fork하지 마십시오.

우리의 사용을 위한 변경 사항이 필요하지 않은 차트는 이 저장소로 Fork되어서는 안 된다는 것을 명시합니다.

Fork 가이드라인

민감한 정보

만약 주어진 차트가 환경 내부에서 민감한 통신 비밀(예: 비밀번호 또는 암호화 키)이 제공될 것을 기대한다면, 우리는 initContainers를 사용하는 것을 선호합니다.

기능 확장

상위 차트가 수용하지 않을 정도로 기능을 확장해야 하는 경우가 있습니다.

구성 구체화 처리

행동의 변경으로 인해 기능적으로 파괴적인 변경이 필요한 개발 시기도 있습니다. 이러한 변경을 피하려고 노력하지만, 어떤 항목은 이러한 변경 없이 처리할 수 없는 경우가 있습니다.

이를 처리하기 위해 구체화 템플릿을 구현했습니다. 이 템플릿은 대체하거나 이동해야 하는 속성을 인식하고 사용자가 취해야 하는 조치를 알리도록 설계되었습니다. 이 템플릿은 모든 메시지를 목록으로 컴파일한 다음 fail 호출을 통해 배포를 중지시킵니다. 이는 사용자에게 동시에 정보를 제공하고 차트의 배포가 중단되어 파괴된 상태나 예상치 못한 상태로 되지 않도록 하는 방법을 제공합니다.

구체화 템플릿의 설계, 기능 및 새로운 구체화 추가 방법에 대한 자세한 정보는 구체화 템플릿 문서를 참조하세요.

문제가 될 수 있는 구성 내용 파악 시도

이러한 차트의 복잡성과 그들의 수준에 따른 유연성으로 인해, 예측할 수 없거나 전혀 기능적이지 않은 배포로 이어질 수 있는 구성을 생성할 수 있는 겹치는 상황들이 있습니다. 알려진 문제가 있는 설정 조합을 방지하기 위해 다음 두 패턴을 구현했습니다:

  • 사용자가 지정한 값이 기대와 일치하는지 확인하기 위해 모든 하위 차트에 대해 스키마 유효성 검사를 사용합니다. 자세한 내용은 문서에서 확인하세요.
  • 사용자에게 구성이 작동하지 않을 것으로 경고하고 감지하는 데 사용되도록 설계된 템플릿 로직을 구현했습니다. checkConfig 템플릿의 설계와 기능, 새로운 구성 확인 추가 방법에 대한 자세한 정보는 해당 문서를 참조하세요.

레지스트리 확인

개발 모드에서 Docker 클라이언트로 레지스트리를 확인하는 것은 어려울 수 있습니다. 이것은 레지스트리의 인증서 문제로 부분적으로 발생합니다. 레지스트리의 인증서를 추가하거나 레지스트리를 HTTP로 노출시킬 수 있습니다( global.hosts.registry.https 참조). 인증서를 추가하는 것이 무보안 레지스트리 솔루션보다 더 안전합니다.

레지스트리는 MinIO 서비스의 외부 도메인 이름( global.hosts.minio.name 참조)을 사용합니다. 개발 환경에 사용자 정의 TLD를 사용하여 내부 도메인 이름을 사용할 때 오류가 발생할 수 있습니다. 일반적인 증상은 레지스트리에 로그인할 수 있지만 이미지를 푸시하거나 끌어올 수 없는 것입니다. 대개 레지스트리 컨테이너가 미니오 도메인 이름을 해석하고 올바른 엔드포인트를 찾을 수 없어서 발생합니다(컨테이너 로그에서 오류를 확인할 수 있습니다).

개발 환경 문제 해결

새로운 차트 기능을 작업하는 동안 개발자는 고유한 문제를 마주할 수 있습니다. 개발 클러스터에 이상한 문제가 있는 경우 문제 해결 가이드를 참조하세요.

참고: 위의 링크에 나온 문제 해결 단계는 개발 클러스터 전용입니다. 제발 이러한 절차를 생산 환경에서 사용하지 마세요. 그렇게 하면 데이터가 손실될 수 있습니다.

추가 Helm 정보

내부 Helm 작업의 동작에 대한 일부 정보: