Skip to content

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

Open
exijn wants to merge 1 commit into
developfrom
ci/39-gsmsv-cd-discord
Open

develop 기반 GSMSV CD 및 Discord 배포 알림 구축#41
exijn wants to merge 1 commit into
developfrom
ci/39-gsmsv-cd-discord

Conversation

@exijn

@exijn exijn commented Aug 31, 2026

Copy link
Copy Markdown
Member

✨ 작업 내용

develop 반영을 기준으로 GHCR 이미지 빌드와 GSMSV 수동·자동 배포를 수행하는 CD Workflow 및 Discord 배포 알림을 추가했습니다.


🔍 리뷰 시 참고사항

  • 관련 Issue: develop 기반 GSMSV CD 및 Discord 배포 알림 구축 #39
  • develop push는 Repository Variable CD_ENABLED가 정확히 true일 때만 배포합니다.
  • workflow_dispatch의 기본 dry_run=true는 이미지 빌드만 수행하며 SSH, 서버 배포, GHCR push, Discord 전송을 하지 않습니다.
  • commit SHA 불변 태그와 develop 가변 태그를 GHCR에 push하고, 서버에서는 readiness 확인 후 app만 갱신합니다.
  • readiness 실패 시 확인 가능한 이전 SHA 이미지로 app rollback을 시도하며 DB migration은 되돌리지 않습니다.
  • Discord webhook은 DISCORD_DEPLOY_WEBHOOK_URL Secret에서만 읽고, 로그·URL·환경변수는 전송하지 않도록 마스킹·길이 제한을 적용했습니다.
  • 필요한 Secrets: DEPLOY_HOST, DEPLOY_PORT, DEPLOY_USER, DEPLOY_SSH_KEY, DISCORD_DEPLOY_WEBHOOK_URL
  • 필요한 Variables: CD_ENABLED, 선택 DEPLOY_PATH (기본 /opt/mudda)
  • 실제 Secret 등록, Workflow 실행, Discord 호출, GSMSV SSH 접속·배포는 수행하지 않았습니다.
  • Docker daemon이 없어 Docker build 및 Compose 통합 기동은 실행하지 못했습니다.
  • 실제 활성화 전 workflow_dispatch dry-run과 서버 파일·GHCR 접근 권한을 별도로 확인해야 합니다.

변경 파일

  • .github/workflows/deploy-develop.yml
  • ops/deploy/의 배포·알림·마스킹 스크립트와 fixture 테스트
  • docker-compose.prod.ymlAPP_IMAGE override
  • docs/GSMSV_CD.md

설계·보안

  • Workflow 권한은 contents: read, packages: write로 제한했습니다.
  • pull_request에서는 실행되지 않으며, pull_request_target과 PAT를 사용하지 않습니다.
  • PR head 코드를 checkout하거나 실행하지 않고 develop push의 trusted revision만 checkout합니다.
  • Docker image에는 Secret을 복사하지 않고, 서버 .env.production을 Actions로 가져오지 않습니다.
  • PostgreSQL·Redis volume을 삭제하거나 down -v/prune하지 않습니다.

검증 결과

  • bash -n ops/deploy/*.sh: 통과
  • bash ops/deploy/tests/test.sh: 통과
  • Python YAML parse: 통과
  • docker compose --env-file .env.production -f docker-compose.prod.yml config --quiet: 통과 (placeholder fixture)
  • git diff --check: 통과
  • ./gradlew test: JDK 25/전역 JDK 26 설정 및 Kotlin DSL 호환 오류로 실패; JDK 23 재시도는 Docker/Testcontainers 환경에서 중단됨
  • docker buildx build: Docker Desktop Linux daemon 미기동으로 실행 불가
  • shellcheck, actionlint: 설치되어 있지 않아 실행하지 못함

자체 코드 리뷰

  • 1차: Secret 노출, shell·JSON injection, 권한, 동시 배포, readiness·rollback, volume 보존을 확인했고 수정 사항 없음.
  • 2차: 저장소 규칙, 변경 범위, 기존 CI·수동 배포 회귀, 문서 일치, 임시 파일·credential 포함 여부를 확인했고 수정 사항 없음.

제외 범위

  • 실제 Secret/Variable 등록, 서버 배포, Discord 호출
  • DB 자동 rollback, 무중단·Blue-Green, 백업, 모니터링 스택
  • Nginx·Certbot 및 GitHub Actions CD 외 기능 변경

✅ 체크리스트

  • 문서(README, .env.example 등) 변경이 필요한 경우 작성 또는 수정했나요?
  • 작업한 코드가 정상적으로 동작하는 것을 직접 확인했나요?
  • 필요한 경우 테스트 코드를 작성하거나 수정했나요?
  • Merge 대상 브랜치를 올바르게 설정했나요? (develop)
  • PR에 관련 없는 작업이 포함되지 않았나요?
  • 적절한 라벨과 리뷰어를 설정했나요? (🌏 Deploy, 리뷰어는 지정하지 않음)

📎 관련 이슈(선택)

@exijn exijn added the 🌏 Deploy 배포 관련 label Aug 31, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🌏 Deploy 배포 관련

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant