docs: README.md 추가 #239
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |