CI/CD
목적
Lumie의 활성 CI/CD 경로는 애플리케이션 저장소의 GitHub Actions에서 시작합니다. main 푸시 시 저장소별 워크플로가 점검을 실행하고 ARM64 컨테이너 이미지를 빌드한 뒤, 짧은 SHA 태그와 main 태그를 Zot으로 푸시합니다. 이후 argocd-image-updater가 Zot을 감시하고 허용된 최신 이미지 태그를 lumie-infra에 다시 기록하면, Argo CD가 변경된 선언 상태를 조정합니다.
Tekton 매니페스트는 여전히 lumie-infra/applications/tekton/** 아래에 존재하지만, Tekton Argo CD 애플리케이션은 lumie-infra/applications/kustomization.yaml에서 주석 처리되어 있습니다. 이 매니페스트는 활성 빌드 시스템이 아니라 보관된 재활성화 경로로 취급하세요.
이 페이지는 이미지 빌드, 레지스트리 게시, 이미지 태그 자동화, GitOps 배포 핸드오프를 변경하는 개발자를 위한 레퍼런스 문서입니다. 비활성 Tekton 컨트롤러 매니페스트는 Tekton을 참고하세요.
소스 경로
| 경로 | 역할 |
|---|---|
lumie-backend/.github/workflows/ci.yml | Gradle 테스트를 실행하고 backend ARM64 이미지를 빌드해 Zot으로 푸시 |
lumie-frontend/.github/workflows/ci.yml | frontend 점검을 실행하고 frontend ARM64 이미지를 빌드해 Zot으로 푸시 |
lumie-document/.github/workflows/ci.yml | Docusaurus를 빌드하고 docs 이미지를 빌드해 Zot 으로 푸시 |
lumie-infra/applications/argocd-image-updater/argocd.yaml | 활성 이미지 태그 자동화 컨트롤러 설치 |
lumie-infra/applications/argocd-image-updater/manifests/image-updaters.yaml | Zot 이미지를 lumie-infra Helm values 쓰기 반영 대상에 매핑 |
lumie-infra/applications/kustomization.yaml | argocd-image-updater를 등록하고 Tekton 애플리케이션을 주석 처리 |
lumie-infra/applications/lumie/**/{common-values,helm-values}.yaml | 갱신된 이미지 태그를 받는 배포 values |
lumie-infra/applications/tekton/ci-cd/** | 재활성화 가능성을 위해 보관된 비활성 Tekton 빌드 및 values 갱신 매니페스트 |
런타임 흐름
이미지 및 쓰기 반영 카탈로그
| 소스 | 이미지 | 쓰기 반영 대상 |
|---|---|---|
lumie-backend | zot.lumie-infra.com/applications/lumie-backend | applications/lumie/backend/common-values.yaml |
lumie-frontend | zot.lumie-infra.com/applications/lumie-frontend | applications/lumie/frontend/common-values.yaml |
lumie-document | zot.lumie-infra.com/web-apps/lumie-document | applications/lumie/document/helm-values.yaml |
| 워커 서비스 | zot.lumie-infra.com/applications/{analysis-svc,chatbot-svc,grading-svc,report-svc,temp-omr-grading} | image-updaters.yaml에 나열된 워커 쓰기 반영 대상입니다. 검사한 workspace에는 이에 대응하는 저장소 로컬 GitHub Actions 워크플로가 선언되어 있지 않습니다. |
argocd-image-updater는 ^[0-9a-f]{8}$와 일치하는 태그만 허용하고 활성 linux/arm64 플랫폼에 대해 newest-build를 사용합니다. main 태그는 사람과 registry 점검에는 계속 유용하지만, GitOps 쓰기 반영 계약은 변경 불가능한 짧은 SHA 태그입니다.
자격 증명 흐름
| 자격 증명 | 소비자 | 목적 |
|---|---|---|
ZOT_USERNAME / ZOT_PASSWORD GitHub secrets | 저장소별 GitHub Actions 워크플로 | 이미지 푸시 전 zot.lumie-infra.com 로그인 |
argocd-image-updater-zot-vss | argocd-image-updater | Vault에서 Zot 자격 증명을 updater 네임스페이스로 읽기 |
| Argo CD repo credentials | argocd-image-updater | Helm values 쓰기 반영 커밋을 https://github.com/Lumie-Edu/lumie-infra.git로 푸시 |
비활성 Tekton 경로
체크인된 Tekton 리소스는 Kaniko로 이미지를 빌드하고 git-update-values를 lumie-infra에 실행하는 Gitea webhook 경로를 설명합니다. 다음 리소스가 주석 처리되어 있는 동안 이 경로는 활성 상태가 아닙니다.
소스 앵커: lumie-infra/applications/kustomization.yaml의 Tekton CI/CD resource 주석.
# - tekton/pipeline/argocd.yaml
# - tekton/triggers/argocd.yaml
# - tekton/dashboard/argocd.yaml
# - tekton/ci-cd/argocd.yaml
Tekton을 재활성화할 때는 Tekton 전용 drift를 계속 드러내야 합니다.
| 소스 | 현재 의미 |
|---|---|
applications/tekton/ci-cd/manifests/tasks/git-update-values.yaml | 인클러스터 Gitea를 통해 배포 values를 푸시 |
활성 루트 Argo CD Application과 argocd-image-updater | GitHub를 정식 lumie-infra 쓰기 반영 대상으로 사용 |
applications/kustomization.yaml | 모든 Tekton 애플리케이션을 비활성으로 둠 |
검증
cd lumie-infra
rg -n "argocd-image-updater|ImageUpdater|writeBackTarget|allowTags|tekton" \
applications/kustomization.yaml applications/argocd-image-updater applications/tekton
cd ../lumie-backend && rg -n "REGISTRY|IMAGE_NAME|docker/build-push-action" .github/workflows/ci.yml
cd ../lumie-frontend && rg -n "REGISTRY|IMAGE_NAME|docker/build-push-action" .github/workflows/ci.yml
cd ../lumie-document && rg -n "REGISTRY|IMAGE_NAME|docker/build-push-action" .github/workflows/ci.yml
kubectl get applications -n argocd | rg 'argocd-image-updater|tekton' || true
kubectl get imageupdaters -n argocd
성공 신호:
argocd-image-updater가 Argo CD에 등록되어 있고 healthy 상태입니다.applications/kustomization.yaml에서 의도적으로 주석을 해제하지 않는 한 Tekton 애플리케이션은 보이지 않습니다.- 애플리케이션 Helm values는 Zot metadata에서 기록된 짧은 SHA 이미지 태그를 사용합니다.