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 차트를 배포하고 릴리스가 성공적으로 생성되었음을 확인한 후 웹 서비스가 Ready 상태인지 검증합니다. 이 접근 방식은 애플리케이션이 좋은 상태인지 확인하기 위해 Kubernetes 준비 프로브를 활용합니다. 우리 vcluster 구현 계획에 대한 더 많은 정보는 issue 5013를 참조하세요.

리뷰 앱 관리

리뷰 앱은 기본적으로 두 시간 동안 활성 상태를 유지하며, 이 시간이 지나면 관련 CI 작업에 의해 자동으로 중지됩니다. 프로세스는 다음과 같이 작동합니다:

  1. create_review_* 작업이 리뷰 앱 환경을 생성합니다.

    • 이 작업은 환경 정보를 echo만 출력합니다. 이는 이러한 작업이 실패하지 않도록 보장하여, 우리가 일관되게 환경을 생성하고 향후 CI 작업에 의해 자동으로 중지될 수 없는 파손된 상태로 남겨두지 않도록 합니다.
  2. review_* 작업이 Helm Chart를 환경에 설치합니다.

  3. stop_review_* 작업은 REVIEW_APPS_AUTO_STOP_IN이라는 변수로 정의된 시간 후에 실행됩니다.

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

  1. 관련된 create_review_* 작업을 찾습니다.

  2. 작업 페이지 상단에서 This job is deployed to <cluster>/<commit>라는 제목의 환경 링크를 클릭합니다.

  3. 환경 페이지의 오른쪽 상단에서 다음 버튼을 볼 수 있습니다:

    • 환경 고정: 핀 아이콘으로 표시된 이 버튼을 클릭하면 환경이 자동으로 중지되지 않도록 방지합니다.

      이 버튼을 클릭하면 stop_review_* 작업이 취소됩니다. 디버깅을 마친 후 수동으로 해당 작업을 실행해야 합니다.

      이 옵션은 실패한 환경을 디버그할 추가 시간이 필요한 경우 유용합니다.

    • 배포 보기: 이 버튼을 클릭하면 실행 중인 GitLab 인스턴스의 환경 URL이 열립니다.

    • 중지: 이 버튼을 클릭하면 관련된 stop_review_* 작업이 실행됩니다.

업스트림 차트를 포크해야 할 때

변경 사항 없음, 포크 없음

작동을 위해 변경이 필요하지 않은 차트는 이 저장소에 포크하지 않아야 합니다.

포크 가이드라인

민감한 정보

주어진 차트가 비밀번호나 암호화 키와 같은 민감한 통신 비밀이 환경 내에서 제공될 것으로 예상되는 경우, 우리는 initContainers를 사용하는 것을 선호합니다.

기능 확장

차트의 기능을 확장해야 하는 경우가 있으며, 그러한 경우 업스트림에서 수용하지 않을 수 있습니다.

구성 내역 처리

개발 중에 동작 변경으로 인해 기능적으로 파괴적인 변경이 필요한 경우가 있습니다. 우리는 이러한 변경을 피하려고 노력하지만, 일부 항목은 그러한 변경 없이는 처리할 수 없습니다.

이를 처리하기 위해 폐기 템플릿을 구현했습니다. 이 템플릿은 교체 또는 재배치가 필요한 속성을 인식하고 사용자가 취해야 할 작업을 알리도록 설계되었습니다. 이 템플릿은 모든 메시지를 리스트로 컴파일한 다음, fail 호출을 통해 배포를 중지합니다. 이는 사용자에게 정보를 제공하는 동시에 차트가 손상되거나 예기치 않은 상태로 배포되는 것을 방지하는 방법을 제공합니다.

설계, 기능 및 새로운 폐기 사항 추가 방법에 대한 자세한 정보는 폐기 템플릿 문서를 참조하십시오.

문제 있는 구성 잡기 시도

이 차트의 복잡성 및 유연성으로 인해, 예기치 않거나 완전히 비기능적인 배포로 이어질 수 있는 구성 조합을 생성할 수 있는 중복이 발생할 수 있습니다. 알려진 문제 설정 조합을 방지하기 위해, 우리는 다음 두 가지 패턴을 설정했습니다:

  • 모든 하위 차트에 대해 스키마 검증을 사용하여 사용자 지정 값이 예상에 부합하는지 확인합니다. 자세한 내용은 문서를 참조하십시오.

  • 구성에서 작동하지 않을 것임을 감지하고 사용자에게 경고하도록 설계된 템플릿 논리를 구현합니다. 설계 및 기능, 새로운 구성 검사를 추가하는 방법에 대한 자세한 정보는 checkConfig 템플릿 문서를 참조하십시오.

레지스트리 확인

개발 모드에서는 Docker 클라이언트로 레지스트리를 확인하는 것이 어려울 수 있습니다.

이는 부분적으로 레지스트리의 인증서 문제 때문입니다.

인증서를 추가 하거나 레지스트리를 HTTP로 노출 (참조: global.hosts.registry.https)할 수 있습니다.

인증서를 추가하는 것이 불안정한 레지스트리 솔루션보다 더 안전하다는 점에 유의하세요.

레지스트리가 MinIO 서비스의 외부 도메인 이름을 사용한다는 점도 기억하세요 (참조: global.hosts.minio.name).

내부 도메인 이름을 사용할 경우, 예를 들어 개발 환경을 위한 커스텀 TLD를 사용할 때 오류가 발생할 수 있습니다.

일반적인 증상은 레지스트리에 로그인할 수 있지만 이미지를 푸시하거나 풀할 수 없는 것입니다.

이는 일반적으로 레지스트리 컨테이너가 MinIO 도메인 이름을 확인할 수 없어 올바른 엔드포인트를 찾을 수 없기 때문입니다 (컨테이너 로그에서 오류를 확인할 수 있습니다).

개발 환경 문제 해결

개발자들은 새로운 차트 기능을 작업할 때 고유한 문제에 직면할 수 있습니다.

개발 클러스터에 이상한 문제가 있는 경우, 문제 해결 가이드를 참조하세요.

참고: 위 링크에 설명된 문제 해결 단계는 개발 클러스터에 한정됩니다.

이 절차를 프로덕션 환경에서 사용하면 데이터가 손실될 수 있습니다.

추가 Helm 정보

Helm의 내부 동작에 대한 몇 가지 정보: