GitOps CI/CD 파이프라인 실습 프로젝트의 애플리케이션 레포입니다. 간단한 정적 웹 페이지(Nginx)를 컨테이너로 빌드하고, GitHub Actions로 이미지 빌드·푸시를 자동화합니다.
배포는 별도의 매니페스트 레포(gitops-sample-manifest)와 ArgoCD가 담당합니다. (앱 레포와 배포 레포를 분리하는 GitOps 표준 구조)
[개발자] --- git push ---> [gitops-sample-app] (이 레포)
|
| (GitHub Actions - CI)
v
Docker 이미지 빌드 → GHCR에 push
|
v
[gitops-sample-manifest] (Helm 차트)
|
| (ArgoCD가 Git 변경 감지 - CD)
v
kubeadm 클러스터(EC2)에 자동 배포
main 브랜치에 push하면 .github/workflows/build.yml이 자동 실행됩니다.
- 소스 체크아웃
- GHCR(GitHub Container Registry) 로그인
- Dockerfile로 이미지 빌드
ghcr.io/gyu2001/gitops-sample-app:<커밋SHA>태그로 push
커밋마다 고유한 SHA를 이미지 태그로 사용해, 어떤 커밋이 어떤 이미지로 배포됐는지 추적 가능하도록 구성했습니다.
| 파일 | 역할 |
|---|---|
index.html |
배포할 정적 웹 페이지 (버전 표시) |
Dockerfile |
Nginx 기반 컨테이너 이미지 정의 |
.github/workflows/build.yml |
이미지 빌드·푸시 CI 워크플로우 |
GitHub Actions Docker GHCR Nginx
- 이미지 태그: 커밋 SHA (
ghcr.io/gyu2001/gitops-sample-app:<SHA>) — 어떤 커밋이 어떤 이미지로 배포됐는지 1:1로 추적 - 릴리스 태그: 사람이 읽는 버전은 Git 태그(
v2.0.0)로 함께 관리
- 빌드 전 테스트 단계 추가 (Dockerfile 검사, 컨테이너 기동 후 응답 확인)
- 빌드가 끝나면 배포 레포에 이미지 태그 변경 PR을 자동으로 생성
- 기능 브랜치와 PR 리뷰를 거쳐 main에 머지하도록 브랜치 보호 규칙 적용
- 배포 매니페스트: gitops-sample-manifest