- 아키텍처
- 환경 설정
- 스타일 가이드
- 테스트 작성 및 실행
- 버전 관리 및 릴리스
- 변경 로그 항목
- 파이프라인
- 업스트림 차트를 포크해야 할 때
- 구성 내역 처리
- 문제 있는 구성 잡기 시도
- 레지스트리 확인
- 개발 환경 문제 해결
- 추가 Helm 정보
Helm 차트 개발에 기여하기
우리의 기여 정책은 CONTRIBUTING.md에서 확인할 수 있습니다.
차트에 문서 변경을 기여하는 데는 텍스트 편집기만 필요합니다. 문서는 doc/
디렉토리에 저장됩니다.
아키텍처
개발을 시작하기 전에 차트의 목표, 아키텍처 및 설계 결정을 검토하는 것이 유용합니다.
이 정보는 GitLab Helm 차트의 아키텍처에서 확인할 수 있습니다.
환경 설정
차트 개발을 위해 작업 공간을 준비하려면 개발 환경 설정을 참조하세요.
스타일 가이드
차트 개발을 위한 가이드라인과 모범 사례는 차트 개발 스타일 가이드에서 확인할 수 있습니다.
테스트 작성 및 실행
우리는 차트가 의도한 대로 작동하는지 검증하기 위해 여러 가지 유형의 테스트를 실행합니다.
RSpec 테스트 개발하기
단위 테스트는 RSpec로 작성되며, 차트 저장소의 spec/
디렉토리에 저장됩니다.
차트의 기능을 검증하기 위해 RSpec 테스트 생성에 대한 참고 사항을 읽어보세요.
bats 테스트 개발하기
쉘 스크립트의 함수에 대한 단위 테스트는 bats로 작성되며, 테스트하는 스크립트 파일 옆의 scripts/
디렉토리에 저장됩니다.
이 프로젝트에서 사용되는 스크립트의 함수를 검증하기 위해 bats 테스트 생성에 대한 참고 사항을 읽어보세요.
GitLab QA 실행하기
GitLab QA는 배포된 클라우드 네이티브 GitLab 설치에 대한 통합 및 기능 테스트를 실행하는 데 사용할 수 있습니다.
ChaosKube
ChaosKube는 고가용성 클라우드 네이티브 GitLab 설치의 결함 허용성을 테스트하는 데 사용할 수 있습니다.
ClickHouse
GitLab과 함께 외부 ClickHouse 서버를 구성하는 지침입니다.
버전 관리 및 릴리스
버전 체계, 분기 및 태그에 대한 세부정보는 릴리스 문서에서 확인할 수 있습니다.
변경 로그 항목
모든 CHANGELOG.md
항목은 변경 로그 항목 워크플로를 통해 생성해야 합니다.
파이프라인
GitLab CI 파이프라인은 다음에 대해 실행됩니다:
- 병합 요청
- 기본 브랜치
- 안정적인 브랜치
- 태그
이 CI 파이프라인의 구성은 다음에서 관리됩니다:
.gitlab-ci.yml
-
.gitlab/ci/
아래의 파일들
리뷰 앱
우리는 CI에서 리뷰 앱을 사용하여 Helm 차트의 실행 인스턴스를 배포하고 그에 대해 테스트합니다.
이 리뷰 앱을 EKS 및 GKE 클러스터에 배포하여 Helm 릴리스가 성공적으로 생성되었음을 확인한 후, GitLab QA 및 다른 RSpec 테스트를 실행합니다.
특히 병합 요청의 경우, vcluster
를 사용하여 일시적인 클러스터를 생성합니다. 이렇게 하면 외부 DNS나 Cert Manager 종속성이 포함되지 않은 구성과 간소화된 환경 덕분에 더 최신 버전의 Kubernetes를 더 빠르게 테스트할 수 있습니다. 이 경우 우리는 Helm 차트를 배포하고 릴리스가 성공적으로 생성되었음을 확인한 후 웹 서비스가 Ready
상태인지 검증합니다. 이 접근 방식은 애플리케이션이 좋은 상태인지 확인하기 위해 Kubernetes 준비 프로브를 활용합니다. 우리 vcluster
구현 계획에 대한 더 많은 정보는 issue 5013를 참조하세요.
리뷰 앱 관리
리뷰 앱은 기본적으로 두 시간 동안 활성 상태를 유지하며, 이 시간이 지나면 관련 CI 작업에 의해 자동으로 중지됩니다. 프로세스는 다음과 같이 작동합니다:
-
create_review_*
작업이 리뷰 앱 환경을 생성합니다.- 이 작업은 환경 정보를
echo
만 출력합니다. 이는 이러한 작업이 실패하지 않도록 보장하여, 우리가 일관되게 환경을 생성하고 향후 CI 작업에 의해 자동으로 중지될 수 없는 파손된 상태로 남겨두지 않도록 합니다.
- 이 작업은 환경 정보를
-
review_*
작업이 Helm Chart를 환경에 설치합니다. -
stop_review_*
작업은REVIEW_APPS_AUTO_STOP_IN
이라는 변수로 정의된 시간 후에 실행됩니다.
하나 이상의 review_*
작업이 실패하고 환경을 디버그해야 하는 경우, 다음과 같이 할 수 있습니다:
-
관련된
create_review_*
작업을 찾습니다. -
작업 페이지 상단에서
This job is deployed to <cluster>/<commit>
라는 제목의 환경 링크를 클릭합니다. -
환경 페이지의 오른쪽 상단에서 다음 버튼을 볼 수 있습니다:
-
환경 고정: 핀 아이콘으로 표시된 이 버튼을 클릭하면 환경이 자동으로 중지되지 않도록 방지합니다.
이 버튼을 클릭하면
stop_review_*
작업이 취소됩니다. 디버깅을 마친 후 수동으로 해당 작업을 실행해야 합니다.이 옵션은 실패한 환경을 디버그할 추가 시간이 필요한 경우 유용합니다.
-
배포 보기: 이 버튼을 클릭하면 실행 중인 GitLab 인스턴스의 환경 URL이 열립니다.
-
중지: 이 버튼을 클릭하면 관련된
stop_review_*
작업이 실행됩니다.
-
업스트림 차트를 포크해야 할 때
변경 사항 없음, 포크 없음
작동을 위해 변경이 필요하지 않은 차트는 이 저장소에 포크하지 않아야 합니다.
포크 가이드라인
민감한 정보
주어진 차트가 비밀번호나 암호화 키와 같은 민감한 통신 비밀이 환경 내에서 제공될 것으로 예상되는 경우,
우리는 initContainers
를 사용하는 것을 선호합니다.
기능 확장
차트의 기능을 확장해야 하는 경우가 있으며, 그러한 경우 업스트림에서 수용하지 않을 수 있습니다.
구성 내역 처리
개발 중에 동작 변경으로 인해 기능적으로 파괴적인 변경이 필요한 경우가 있습니다. 우리는 이러한 변경을 피하려고 노력하지만, 일부 항목은 그러한 변경 없이는 처리할 수 없습니다.
이를 처리하기 위해 폐기 템플릿을 구현했습니다. 이 템플릿은 교체 또는 재배치가 필요한 속성을 인식하고 사용자가 취해야 할 작업을 알리도록 설계되었습니다. 이 템플릿은 모든 메시지를 리스트로 컴파일한 다음, fail
호출을 통해 배포를 중지합니다. 이는 사용자에게 정보를 제공하는 동시에 차트가 손상되거나 예기치 않은 상태로 배포되는 것을 방지하는 방법을 제공합니다.
설계, 기능 및 새로운 폐기 사항 추가 방법에 대한 자세한 정보는 폐기 템플릿 문서를 참조하십시오.
문제 있는 구성 잡기 시도
이 차트의 복잡성 및 유연성으로 인해, 예기치 않거나 완전히 비기능적인 배포로 이어질 수 있는 구성 조합을 생성할 수 있는 중복이 발생할 수 있습니다. 알려진 문제 설정 조합을 방지하기 위해, 우리는 다음 두 가지 패턴을 설정했습니다:
-
모든 하위 차트에 대해 스키마 검증을 사용하여 사용자 지정 값이 예상에 부합하는지 확인합니다. 자세한 내용은 문서를 참조하십시오.
-
구성에서 작동하지 않을 것임을 감지하고 사용자에게 경고하도록 설계된 템플릿 논리를 구현합니다. 설계 및 기능, 새로운 구성 검사를 추가하는 방법에 대한 자세한 정보는
checkConfig
템플릿 문서를 참조하십시오.
레지스트리 확인
개발 모드에서는 Docker 클라이언트로 레지스트리를 확인하는 것이 어려울 수 있습니다.
이는 부분적으로 레지스트리의 인증서 문제 때문입니다.
인증서를 추가 하거나
레지스트리를 HTTP로 노출 (참조: global.hosts.registry.https
)할 수 있습니다.
인증서를 추가하는 것이 불안정한 레지스트리 솔루션보다 더 안전하다는 점에 유의하세요.
레지스트리가 MinIO 서비스의 외부 도메인 이름을 사용한다는 점도 기억하세요 (참조: global.hosts.minio.name
).
내부 도메인 이름을 사용할 경우, 예를 들어 개발 환경을 위한 커스텀 TLD를 사용할 때 오류가 발생할 수 있습니다.
일반적인 증상은 레지스트리에 로그인할 수 있지만 이미지를 푸시하거나 풀할 수 없는 것입니다.
이는 일반적으로 레지스트리 컨테이너가 MinIO 도메인 이름을 확인할 수 없어 올바른 엔드포인트를 찾을 수 없기 때문입니다 (컨테이너 로그에서 오류를 확인할 수 있습니다).
개발 환경 문제 해결
개발자들은 새로운 차트 기능을 작업할 때 고유한 문제에 직면할 수 있습니다.
개발 클러스터에 이상한 문제가 있는 경우, 문제 해결 가이드를 참조하세요.
참고: 위 링크에 설명된 문제 해결 단계는 개발 클러스터에 한정됩니다.
이 절차를 프로덕션 환경에서 사용하면 데이터가 손실될 수 있습니다.
추가 Helm 정보
Helm의 내부 동작에 대한 몇 가지 정보:
- 배포 팀은 Helm 차트에 대한 교육 프레젠테이션을 가지고 있습니다.
- Helm에서의 템플릿 작성은 Go text/template 및 sprig로 수행됩니다.
- Helm 저장소에는 Helm으로 개발하는 것에 대한 추가 정보가 팁 및 요령 섹션에 있습니다.
- 함수 및 파이프라인.
- 서브차트 및 전역 설정.