Skip to content

Update README.md

Update README.md #27

Workflow file for this run

name: CI/CD Pipeline
on:
push:
branches: [ develop, main ]
env:
DOCKER_IMAGE: leeeunda/blockcloud-server
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
# 코드 체크아웃
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}
# JDK 21 설정
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '21'
# Gradle 캐시 설정
- name: Cache Gradle
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: ${{ runner.os }}-gradle-
# application.yml 생성
- name: Create application.yml files
run: |
mkdir -p src/main/resources
echo "${{ secrets.APPLICATION_YML }}" > ./src/main/resources/application.yml
echo "${{ secrets.APPLICATION_YML_DEV }}" > ./src/main/resources/application-dev.yml
echo "${{ secrets.APPLICATION_YML_PROD }}" > ./src/main/resources/application-prod.yml
echo "${{ secrets.APPLICATION_YML_SECRET }}" > ./src/main/resources/application-secret.yml
# gradlew 실행 권한 부여
- name: Grant execute permission for gradlew
run: chmod +x ./gradlew
# Gradle 빌드 실행
- name: Build with Gradle
run: ./gradlew clean build -x test
# Docker Hub 로그인
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
# Docker 이미지 빌드 및 푸시
- name: Build and Push Docker image
run: |
docker build -t ${{ secrets.DOCKER_USERNAME }}/blockcloud-server .
docker push ${{ secrets.DOCKER_USERNAME }}/blockcloud-server
deploy:
needs: build-and-test
runs-on: ubuntu-latest
steps:
- name: Deploy to EC2 (pull & replace container)
uses: appleboy/[email protected]
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USER }}
key: ${{ secrets.EC2_SSH_KEY }}
timeout: 60s
command_timeout: 15m
script: |
set -euo pipefail
IMAGE="${{ secrets.DOCKER_USERNAME }}/blockcloud-server:latest"
echo "Pulling image: $IMAGE"
docker pull "$IMAGE"
# 기존 컨테이너 정리
docker stop blockcloud-app || true
docker rm blockcloud-app || true
# 새 컨테이너 실행
docker run -d \
--name blockcloud-app \
--restart unless-stopped \
--env-file /srv/app/.env \
-e SPRING_PROFILES_ACTIVE=prod \
-p 127.0.0.1:8080:8080 \
"$IMAGE"
# 헬스체크
echo "🏥 헬스체크 시작 (최대 60초 대기)..."
for i in {1..20}; do
if curl -fsS http://127.0.0.1:8080/actuator/health >/dev/null 2>&1; then
echo "✅ Application is UP and healthy!"
echo "🎉 배포 성공!"
exit 0
else
echo "⏳ Waiting for application to start... (${i}/20)"
sleep 3
fi
done
echo "❌ Application failed to start properly"
echo "📊 컨테이너 상태:"
docker ps -a | grep blockcloud-app || true
echo "📋 컨테이너 로그:"
docker logs --tail=100 blockcloud-app || true
exit 1