클라우드 Dev BE CD 스크립트 작성 - 100-hours-a-week/16-Hot6-wiki GitHub Wiki
이 GitHub Actions 워크플로우는 dev
브랜치로 푸시될 때 백엔드 애플리케이션을 다음 단계로 자동화합니다:
-
CI (Build): Gradle을 통해
bootJar
빌드 수행 및 결과물 업로드 - CD (Deploy): SSH를 통한 GCP 인스턴스에 JAR 업로드 및 실행
on:
push:
branches:
- dev
-
dev
브랜치에 push 될 경우 워크플로우가 실행됨
-
런타임:
ubuntu-latest
-
Environment: 브랜치가
main
이면main
, 아니면dev
-
Checkout
uses: actions/checkout@v3
→ 레포지토리 코드를 체크아웃
-
JDK 설치
uses: actions/setup-java@v3 with: distribution: 'temurin' java-version: '21'
→ JDK 21 설치
-
Gradle 빌드
./gradlew bootJar -x test
→ 테스트 제외하고
.jar
빌드 -
Artifact 업로드
uses: actions/upload-artifact@v4 with: name: backend-jar path: build/libs/*.jar
needs: build
DEPLOY_ENV: ${{ github.ref_name == 'main' && 'prod' || 'dev' }}
SECRET_LABELS: ${{ github.ref_name == 'main' && 'backend_shared backend_prod' || 'backend_shared backend_dev' }}
find . -name "*.jar" | head -n 1
cp "$JAR_FILE" backend.jar
uses: google-github-actions/auth@v2
with:
credentials_json: '${{ secrets.GCP_SA_KEY }}'
-
SECRET_LABELS
에 따라 GCP Secret Manager에서 시크릿을 읽고secrets.properties
생성
gcloud secrets list --filter="labels.env=$LABEL" ...
- Jump 서버를 거쳐 백엔드 서버 접속
cat <<EOF > ~/.ssh/config
...
EOF
scp -F ~/.ssh/config backend.jar ...
scp -F ~/.ssh/config ./secrets/secrets.properties ...
- 기존 프로세스 종료 → 새 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
)
빌드 성공....!