개념
CI 파이프라인 전체 흐름
PR 생성 시
└── 빌드 + 테스트 + hadolint (Dockerfile 검사)
└── 실패하면 merge 못 하게 막음
main 머지 시 (dev 배포)
└── Docker 빌드
└── AWS OIDC로 인증 (Access Key 절대 사용 금지!)
└── ECR push (SHA 태그)
└── Config 레포 overlays/dev/ image tag 갱신
└── ArgoCD가 감지 → dev 자동 배포
tag 푸시 시 (prod 배포) → v* 형식 (예: v1.0.0)
└── Docker 빌드
└── AWS OIDC로 인증
└── ECR push (SHA 태그)
└── Config 레포 overlays/prod/ image tag 갱신
└── ArgoCD가 감지 → prod 자동 배포
OIDC 인증 개념
왜 Access Key를 안 쓰는지?
Access Key를 GitHub Secret에 넣으면
→ 키가 유출될 경우 AWS 계정 전체가 위험
→ 키 만료 관리도 번거로움
OIDC 방식은?
→ GitHub이 "나 team3-app 레포의 main 브랜치야" 라는
토큰을 AWS에 제출
→ AWS IAM이 확인 후 임시 자격증명을 발급
→ 키를 저장할 필요가 없음
Terraform IAM 모듈에서 만든 Role ARN이 여기서 사용됨
→ terraform output github_actions_role_arn 으로 확인
워크플로 파일 위치
team3-app/
└── .github/
└── workflows/
├── ci.yml # PR 시 검증
└── cd.yml # main 머지 / tag 푸시 시 배포
ci.yml 구성
트리거 설정
ci.yml (PR 검증)
on:
pull_request:
branches: [main]
cd.yml (배포)
on:
push:
branches: [main] # dev 배포
tags: ['v*'] # prod 배포
배포 Job 안에서 환경 분기
github.ref == 'refs/heads/main' → dev
startsWith(github.ref, 'refs/tags/') → prod
필수 permissions
OIDC 토큰을 요청하려면 워크플로에
id-token: write 권한이 필요함
이게 없으면 AWS 인증이 아예 안됨
contents: read 도 함께 설정
Job 1 — PR 시 검증
실행 순서:
1. 코드 체크아웃
2. JDK 17 설정
3. Maven 빌드 + 테스트
4. hadolint로 Dockerfile 검사
→ Dockerfile 작성 규칙 위반 시 실패
→ 찾아볼 것: "hadolint github actions"
⚠️ 테스트 실패하면 ECR push 못 가게 막아야 함
needs 키워드로 Job 의존성 설정
Job 2 — main 머지 시 배포