본문 바로가기
WIKI 기술 지식 베이스

개발 가이드

원문 보기 위키 갱신

개발 가이드 (Development Guide)

이 문서는 소스 코드에서 Flagger를 빌드하고, 테스트하고, 실행하는 방법을 설명합니다. 로컬 개발 환경을 구성하고 코드 변경 및 기여 절차를 안내해 드릴게요.

출처: 문서

본문

이 문서는 소스 코드에서 Flagger를 빌드, 테스트, 실행하는 방법을 설명합니다.

개발 환경 구성 (Setup dev environment)

Flagger는 Go로 작성되었으며 의존성 관리를 위해 Go modules를 사용합니다.

개발 머신에 다음 도구를 설치하세요:

  • go >= 1.25
  • kubectl >= 1.30
  • kustomize >= 5.0
  • helm >= 3.0

Flagger 테스트를 위한 Kubernetes 클러스터도 필요합니다. Minikube, Kind, Docker desktop 또는 원격 클러스터(AKS/EKS/GKE 등)를 사용할 수 있습니다.

Flagger에 기여를 시작하려면 GitHub에서 저장소를 포크하세요.

GOPATH 안에 디렉터리를 만듭니다:

mkdir -p $GOPATH/src/github.com/fluxcd

포크를 클론합니다:

cd $GOPATH/src/github.com/fluxcd
git clone https://github.com/YOUR_USERNAME/flagger
cd flagger

Flagger 저장소를 upstream으로 설정합니다:

git remote add upstream https://github.com/fluxcd/flagger.git

upstream과 동기화하기 위해 포크를 정기적으로 동기화합니다:

git fetch upstream
git checkout main
git merge upstream/main

빌드 (Build)

Go 모듈을 다운로드합니다:

go mod download

Flagger 바이너리를 빌드합니다:

make build

로드 테스터 바이너리를 빌드합니다:

make loadtester-build

코드 변경 (Code changes)

모든 커밋은 서명(signed)이 필요합니다. 서명으로 오프(sign off)함으로써, 패치를 작성했거나 DCO 규칙에 따라 자료를 기여할 권리가 있음을 인증하게 됩니다.

Git 구성에 user.name과 user.email이 설정되어 있다면 다음으로 커밋을 자동 서명할 수 있습니다:

git commit -s

PR을 제출하기 전에 변경 사항이 단위 테스트로 다뤄졌는지 확인하세요.

go.mod를 변경했다면 다음을 실행하세요:

go mod tidy

pkg/apis를 변경했다면 Kubernetes 클라이언트 셋을 재생성하세요:

make codegen

코드 포매터를 실행합니다:

go install golang.org/x/tools/cmd/goimports@latest

make fmt

단위 테스트를 실행합니다:

make test

API 변경 (API changes)

pkg/apis를 변경했다면 다음으로 Kubernetes 클라이언트 셋을 재생성하세요:

make codegen

artifacts/flagger/crd.yaml의 검증 스펙을 업데이트하고 실행합니다:

make crd

CRD에 대한 모든 변경은 Open API 스키마 업데이트를 수반해야 합니다.

수동 테스트 (Manual testing)

클러스터에 서비스 메시 및/또는 인그레스 컨트롤러를 설치하고 여기에 나열된 설치 옵션 중 하나로 Flagger를 배포하세요.

CRD를 변경했다면 로컬 복사본을 적용하세요:

kubectl apply -f artifacts/flagger/crd.yaml

클러스터에 설치된 Flagger 인스턴스를 종료합니다 (네임스페이스를 자신의 메시/인그레스 네임스페이스로 바꾸세요):

kubectl -n istio-system scale deployment/flagger --replicas=0

Prometheus 인스턴스로 포트 포워딩합니다:

kubectl -n istio-system port-forward svc/prometheus 9090:9090

kubeconfig 경로를 지정해 Flagger를 로컬에서 원격 클러스터에 대해 실행합니다:

go run cmd/flagger/ -kubeconfig=$HOME/.kube/config \
-log-level=info \
-mesh-provider=istio \
-metrics-server=http://localhost:9090

변경 사항을 수동으로 테스트하는 또 다른 방법은 이미지를 빌드해 컨테이너 레지스트리에 푸시하는 것입니다:

make build
docker build -t <YOUR-DOCKERHUB-USERNAME>/flagger:<YOUR-TAG> .
docker push <YOUR-DOCKERHUB-USERNAME>/flagger:<YOUR-TAG>

클러스터에 이미지를 배포하고 Flagger를 스케일 업합니다:

kubectl -n istio-system set image deployment/flagger flagger=<YOUR-DOCKERHUB-USERNAME>/flagger:<YOUR-TAG>
kubectl -n istio-system scale deployment/flagger --replicas=1

이제 튜토리얼 중 하나를 사용해 변경 사항을 수동으로 테스트할 수 있습니다.

통합 테스트 (Integration testing)

Flagger 엔드투엔드 테스트는 Kubernetes Kind로 로컬에서 실행할 수 있습니다.

Kind 클러스터를 만듭니다:

kind create cluster

Flagger 컨테이너 이미지를 빌드하고 클러스터에 로드합니다:

make build
docker build -t test/flagger:latest .
kind load docker-image test/flagger:latest

Istio e2e 테스트를 실행합니다:

./test/istio/run.sh

각 서비스 메시와 인그레스 컨트롤러에는 전용 e2e 테스트 스위트가 있으며, 변경 사항과 일치하는 것을 이 목록에서 선택하세요.

Flagger 저장소에 풀 리퀘스트를 열면 단위 및 통합 테스트가 CI에서 실행됩니다.

더 알아보기 (Learn more)