[STK9-05] GitHub Actions CD 파이프라인
의존: STK9-02 (Dockerfile 완료 후 착수)
작업 내용 (설계 의도)
변경 사항
main 브랜치에 push(PR 머지)될 때 자동으로 Docker 이미지를 빌드·배포하는 GitHub Actions CD 워크플로우를 신설한다.
잡 구성:
build-and-push:docker/login-action→ ghcr.io 인증 (GITHUB_TOKEN 자동 사용)docker/build-push-action으로 backend/frontend 이미지 빌드 + 푸시- 이미지 태그:
latest+sha-{commit_sha[:7]}
deploy(needs: build-and-push):appleboy/ssh-action으로 프로덕션 서버 SSH 접속docker-compose -f docker-compose.prod.yml pull && up -d
GitHub Secrets 필요 (사전 등록 필요):
| Secret | 설명 |
|---|---|
SSH_HOST | 프로덕션 서버 IP/도메인 |
SSH_USER | SSH 접속 유저명 |
SSH_PRIVATE_KEY | SSH 개인키 |
PROD_ENV | .env 파일 내용 (MYSQL_ROOT_PASSWORD 등) |
다이어그램
배포 흐름
sequenceDiagram participant DEV as 개발자 participant GH as GitHub main participant CD as cd.yml participant GHCR as ghcr.io participant PROD as 프로덕션 서버 DEV->>GH: PR 머지 (CI 통과 후) GH->>CD: push to main 트리거 CD->>CD: docker build backend + frontend CD->>GHCR: docker push :latest + :sha-XXXXXX CD->>PROD: SSH → docker-compose pull PROD->>GHCR: pull latest images PROD->>PROD: docker-compose up -d PROD-->>CD: 완료 CD-->>GH: Actions 성공 알림
이미지 태그 전략
flowchart LR BUILD[빌드] --> LATEST[":latest 태그"] BUILD --> SHA[":sha-abc1234 태그"] LATEST --> DEPLOY[프로덕션 배포 - latest 사용] SHA --> ROLLBACK[롤백 - sha 태그로 재배포]
테스트 케이스
- main 브랜치에 push 시 cd.yml이 자동 트리거된다
build-and-push잡 완료 후ghcr.io/biuea3866/stock-backend:latest이미지가 갱신된다deploy잡이 SSH 접속 실패(잘못된 키) 시 잡이 실패하고 이전 컨테이너는 영향받지 않는다- 배포 완료 후 프로덕션 서버에서
curl http://localhost:8080/actuator/health가 200을 반환한다 - sha 태그 이미지를 이용해 이전 버전으로 롤백할 수 있다
- PR 브랜치(feat/*)에 push 시 cd.yml이 트리거되지 않는다 (main 브랜치만 트리거)