클라우드 Dev BE CD 스크립트 작성 - 100-hours-a-week/16-Hot6-wiki GitHub Wiki

클라우드-Dev-be-cd-스크립트-작성.


GitHub Actions: Backend CI & Dev CD 문서

개요

이 GitHub Actions 워크플로우는 dev 브랜치로 푸시될 때 백엔드 애플리케이션을 다음 단계로 자동화합니다:

  1. CI (Build): Gradle을 통해 bootJar 빌드 수행 및 결과물 업로드
  2. CD (Deploy): SSH를 통한 GCP 인스턴스에 JAR 업로드 및 실행

트리거

on:
  push:
    branches:
      - dev
  • dev 브랜치에 push 될 경우 워크플로우가 실행됨

Job 1: Build (build)

환경 설정

  • 런타임: ubuntu-latest
  • Environment: 브랜치가 main이면 main, 아니면 dev

Steps 요약

  1. Checkout

    uses: actions/checkout@v3

    → 레포지토리 코드를 체크아웃

  2. JDK 설치

    uses: actions/setup-java@v3
    with:
      distribution: 'temurin'
      java-version: '21'

    → JDK 21 설치

  3. Gradle 빌드

    ./gradlew bootJar -x test

    → 테스트 제외하고 .jar 빌드

  4. Artifact 업로드

    uses: actions/upload-artifact@v4
    with:
      name: backend-jar
      path: build/libs/*.jar

Job 2: Deploy (deploy)

의존성

needs: build

환경 변수

DEPLOY_ENV: ${{ github.ref_name == 'main' && 'prod' || 'dev' }}
SECRET_LABELS: ${{ github.ref_name == 'main' && 'backend_shared backend_prod' || 'backend_shared backend_dev' }}

Steps 요약

1. Artifact 다운로드 및 이름 변경

find . -name "*.jar" | head -n 1
cp "$JAR_FILE" backend.jar

2. GCP 인증

uses: google-github-actions/auth@v2
with:
  credentials_json: '${{ secrets.GCP_SA_KEY }}'

3. Secrets 생성

  • SECRET_LABELS에 따라 GCP Secret Manager에서 시크릿을 읽고 secrets.properties 생성
gcloud secrets list --filter="labels.env=$LABEL" ...

4. SSH 설정 (Jump Server 사용)

  • Jump 서버를 거쳐 백엔드 서버 접속
cat <<EOF > ~/.ssh/config
...
EOF

5. 서버에 파일 업로드

scp -F ~/.ssh/config backend.jar ...
scp -F ~/.ssh/config ./secrets/secrets.properties ...

6. 백엔드 서버에서 배포 스크립트 실행

  • 기존 프로세스 종료 → 새 jar 실행 → 상태 확인
nohup java -jar ... > backend.log 2>&1 &
pgrep -f backend

✅ 장점 요약

항목 설명
🔄 완전 자동화 CI → CD 까지 완전 자동화
🔐 보안 강화 Secret Manager + Jump Server
🌍 환경 분기 main vs dev 환경 분리 가능

❗ 개선 포인트

항목 제안
환경 분기 개선 ${{ github.ref_name == 'main' }} 대신 if 조건 사용이 가독성 더 좋을 수 있음
로그 업로드 backend.log 파일을 GitHub Actions artifact로 업로드하면 디버깅 쉬움
실패 감지 curl localhost:포트로 실제 서버 작동 여부 확인 로직 보완 가능

🧪 향후 확장 아이디어

  • main 브랜치에도 배포 허용하도록 확장
  • health check endpoint 호출로 배포 검증 자동화
  • Slack 또는 Discord 알림 연동
  • 배포 스크립트 Shell 파일로 분리하여 관리 (e.g. deploy-backend.sh)

빌드 성공....!

alt text

⚠️ **GitHub.com Fallback** ⚠️