Skip to content

develop 기반 GSMSV CD 및 Discord 배포 알림 구축 #39

Description

@exijn

작업 배경

  • PR #35에서 GSMSV 운영용 Dockerfile, docker-compose.prod.yml, application-prod.yaml, .env.production.exampledevelop에 반영되었습니다.
  • GSMSV 최초 수동 배포 이후 develop 반영을 기준으로 이미지를 만들고 서버에 자동 배포할 CD가 필요합니다.
  • 현재 GitHub Secret이 등록되지 않았으므로, 준비 전 develop Push마다 실제 배포가 실행되거나 실패하는 Workflow를 만들지 않습니다.

목표

  • develop 반영을 운영 배포 기준으로 사용합니다.
  • GHCR에 commit SHA 기반 불변 이미지를 빌드·Push합니다.
  • GSMSV 서버에 전용 SSH Key로 접속해 /opt/mudda의 운영 Compose를 갱신합니다.
  • App readiness 통과를 배포 성공 조건으로 사용합니다.
  • 배포 시작·성공·실패 및 rollback 결과를 Discord embed로 알립니다.

구현 체크리스트

  • develop Push 자동 실행과 workflow_dispatch 수동 실행을 구성합니다.
  • Repository Variable CD_ENABLED가 정확히 true일 때만 자동 배포합니다.
  • workflow_dispatch에 기본값 dry-run: true 입력을 제공합니다.
  • dry-run에서 SSH·실제 배포·Discord 전송을 수행하지 않습니다.
  • 필요한 Secret 누락 여부를 값 노출 없이 검증합니다.
  • GITHUB_TOKEN으로 GHCR에 인증하고 SHA 불변 태그를 사용합니다.
  • Docker BuildKit 캐시와 기존 Dockerfile을 재사용합니다.
  • APP_IMAGE 환경변수로 운영 Compose의 이미지 주소를 주입합니다.
  • 기존 수동 docker compose build/up 방식을 유지합니다.
  • DEPLOY_HOST, DEPLOY_PORT, DEPLOY_USER, DEPLOY_SSH_KEY, DISCORD_DEPLOY_WEBHOOK_URL을 지원합니다.
  • 서버의 운영 .env.production을 읽거나 출력하지 않습니다.
  • readiness timeout·재시도와 실패 시 상태·정제 로그 수집을 구성합니다.
  • 가능한 범위에서 직전 정상 SHA로 rollback하고 rollback readiness를 확인합니다.
  • PostgreSQL·Redis 볼륨을 삭제하거나 재생성하지 않습니다.
  • Discord embed에 시작·성공·실패 정보를 제공하고 민감정보와 로그 길이를 제한합니다.
  • 동시 배포를 방지하는 concurrency를 구성합니다.
  • 최소 권한과 신뢰 가능한 외부 Action 사용 정책을 적용합니다.

문서·검증

  • 필요한 GitHub Secrets·Variables와 CD_ENABLED 활성화 순서를 문서화합니다.
  • 최초 서버 파일·권한·GHCR 접근·전용 SSH Key 준비 방법을 문서화합니다.
  • dry-run, 최초 활성화, readiness, rollback, 장애 복구 절차를 문서화합니다.
  • Workflow YAML, Shell/JSON 직렬화, 마스킹, dry-run, Compose 이미지 치환을 테스트합니다.
  • 기존 CI와 수동 배포 방식의 회귀가 없는지 확인합니다.

제외 범위

  • GitHub Secret·Variable 실제 생성·등록 및 실제 Webhook 호출
  • GSMSV 서버 SSH 접속·실제 배포
  • 자동 DB rollback, Blue-Green, Kubernetes, Nginx·Certbot
  • 운영 Docker 파일의 기능 범위를 넘어서는 애플리케이션 변경
  • 실제 Secret·SSH Key·AWS/OAuth Credential 생성 또는 출력

완료 조건

  • Secret 미등록 상태에서 자동 배포가 안전하게 비활성화됩니다.
  • dry-run과 검증 가능한 CD 흐름이 구현되고 운영 문서가 작성됩니다.
  • SHA rollback 기준과 DB migration 호환성 위험이 문서화됩니다.
  • develop 대상 PR이 생성되며 병합하지 않습니다.

대상 브랜치: develop

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions