Skip to content

docs: README.md 추가 #239

docs: README.md 추가

docs: README.md 추가 #239

Workflow file for this run

name: CI CD Process
on:
push:
branches: [ main ] # develop과 main 브랜치만 배포
pull_request:
branches: [ dev, main ] # PR 생성/업데이트 시에도 실행
workflow_dispatch:
jobs:
test-and-build:
runs-on: ubuntu-latest
if: |
github.event_name == 'pull_request' ||
(github.event_name == 'push' && github.ref == 'refs/heads/develop')
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Setup Gradle Wrapper
uses: gradle/actions/wrapper-validation@v3
- name: Debug and fix gradlew
run: |
echo "=== 디렉토리 구조 확인 ==="
ls -la
echo "=== be 디렉토리 내용 ==="
ls -la be/
echo "=== gradlew 파일 상세 정보 ==="
cd be
ls -la gradlew* || echo "gradlew 파일들을 찾을 수 없습니다"
echo "=== gradlew 파일 타입 ==="
file gradlew || echo "gradlew 파일 타입 확인 실패"
echo "=== gradlew 첫 줄 확인 ==="
head -1 gradlew || echo "gradlew 첫 줄 읽기 실패"
echo "=== 라인 엔딩 수정 ==="
sed -i 's/\r$//' gradlew
echo "=== 실행 권한 부여 ==="
chmod +x gradlew
echo "=== 수정 후 gradlew 상태 ==="
ls -la gradlew
file gradlew
echo "=== gradlew 실행 테스트 ==="
./gradlew --version || echo "gradlew 실행 실패"
- name: Run tests
run: cd be && ./gradlew clean test
- name: Build application
run: cd be && ./gradlew build -x test
- name: Build status
run: |
if [ "${{ github.event_name }}" == "push" ] && [ "${{ github.ref }}" == "refs/heads/develop" ]; then
echo "✅ develop 브랜치 빌드 완료 - 배포 없이 테스트/빌드만 수행됨"
else
echo "✅ PR 테스트/빌드 완료"
fi
deploy:
runs-on: ubuntu-latest
if: |
(github.event_name == 'push' && github.ref == 'refs/heads/main') ||
github.event_name == 'workflow_dispatch'
steps:
- name: Deploy to server
uses: appleboy/ssh-action@v0.1.10
with:
host: 119.56.208.5
username: kjh
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: 22222
script_stop: true
script: |
cd /home/kjh/Project/Campung_Backend
echo "🚀 운영 서버 배포 시작: ${{ github.ref_name }} 브랜치"
echo "📦 배포 타입: ${{ github.event_name }}"
git fetch origin
CURRENT_BRANCH=$(git branch --show-current)
TARGET_BRANCH="${{ github.ref_name }}"
if [ "$CURRENT_BRANCH" != "$TARGET_BRANCH" ]; then
echo "브랜치 변경: $CURRENT_BRANCH → $TARGET_BRANCH"
git checkout $TARGET_BRANCH
fi
git pull origin $TARGET_BRANCH
cd be
echo "gradlew 상태 확인..."
sed -i 's/\r$//' gradlew
chmod +x gradlew
./gradlew --version || { echo "❌ gradlew 실행 실패"; exit 1; }
./gradlew clean build -x test
# systemctl 관련 수정 (daemon-reload 추가)
echo "systemd 서비스 재시작 중..."
sudo systemctl daemon-reload
sudo systemctl restart campung-backend || { echo "❌ 서비스 재시작 실패"; exit 1; }
echo "애플리케이션 시작 대기 중... (최대 10분)"
INITIAL_WAIT=30 # 초기 대기 (DB 붙는 시간 등 고려)
CHECK_INTERVAL=10 # 체크 간격(초)
MAX_ATTEMPTS=60 # 최대 시도 (60회 × 10초 = 600초 = 10분)
sleep $INITIAL_WAIT
for ((i=1; i<=MAX_ATTEMPTS; i++)); do
if curl -fs http://localhost:8080/ > /dev/null; then
echo "✅ 애플리케이션 응답 확인 완료 ($((INITIAL_WAIT + i*CHECK_INTERVAL))초 후)"
break
else
echo "대기 중... ($((INITIAL_WAIT + i*CHECK_INTERVAL))초)"
sleep $CHECK_INTERVAL
fi
if [ $i -eq $MAX_ATTEMPTS ]; then
echo "❌ 최종 확인 실패: 애플리케이션이 10분 내에 응답하지 않음"
sudo systemctl status campung-backend --no-pager
exit 1
fi
done
echo "Docker 컨테이너 상태 확인 중..."
DOCKER_CONTAINERS=$(docker ps --format "{{.Names}}" 2>/dev/null || echo "")
if echo "$DOCKER_CONTAINERS" | grep -q "Campung" || true; then
echo "✅ MariaDB 컨테이너 실행 중"
else
echo "⚠️ MariaDB 컨테이너 확인 필요"
fi
if echo "$DOCKER_CONTAINERS" | grep -q "campung-redis" || true; then
echo "✅ Redis 컨테이너 실행 중"
else
echo "⚠️ Redis 컨테이너 확인 필요"
fi
echo "🎉 배포 성공!"
if systemctl is-active --quiet campung-backend; then
echo "✅ systemd 서비스 상태: 정상"
else
echo "⚠️ systemd 서비스 상태 확인 필요"
fi