[FEAT] #143 kafka 도입 비동기 이벤트 기반 추천알림 로직 개발 #283
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 with Blue-Green Deployment | |
| on: | |
| push: | |
| branches: [ "develop" ] | |
| pull_request: | |
| branches: [ "develop" ] | |
| jobs: | |
| build-and-deploy: | |
| runs-on: ubuntu-latest | |
| steps: | |
| # 1. GitHub 레포 체크아웃 (소스코드 가져옴) | |
| - name: Checkout repository | |
| uses: actions/checkout@v3 | |
| # 2. JDK 17 설정 | |
| - name: Set up JDK 17 | |
| uses: actions/setup-java@v3 | |
| with: | |
| java-version: '17' | |
| distribution: 'temurin' | |
| # 3. gradlew 권한 부여 | |
| - name: Make gradlew executable | |
| run: chmod +x ./gradlew | |
| # 4. Gradle Build (테스트 제외) | |
| - name: Build with Gradle (skip tests) | |
| run: ./gradlew build -x test | |
| # 5. Docker Build & Push | |
| - name: Build and push Docker image | |
| if: github.event_name == 'push' | |
| run: | | |
| echo "🔨 Building Docker image..." | |
| docker build -t ${{ secrets.DOCKER_USERNAME }}/ccapp:latest . | |
| echo "🔐 Logging into Docker Hub..." | |
| echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin | |
| echo "📤 Pushing to Docker Hub..." | |
| docker push ${{ secrets.DOCKER_USERNAME }}/ccapp:latest | |
| # 6. 배포 파일들을 EC2로 복사 | |
| - name: Copy deployment files to EC2 | |
| if: github.event_name == 'push' | |
| uses: appleboy/scp-action@v0.1.7 | |
| with: | |
| host: ${{ secrets.HOST }} | |
| username: ubuntu | |
| key: ${{ secrets.PRIVATE_KEY }} | |
| source: "docker-compose.yml,switch-blue-green.sh,health-check.sh,rollback.sh" | |
| target: /home/ubuntu/ccapp | |
| overwrite: true | |
| # 7. EC2에서 블루그린 배포 실행 | |
| - name: Deploy with Blue-Green strategy | |
| if: github.event_name == 'push' | |
| uses: appleboy/ssh-action@v0.1.10 | |
| with: | |
| host: ${{ secrets.HOST }} | |
| username: ubuntu | |
| key: ${{ secrets.PRIVATE_KEY }} | |
| script: | | |
| cd /home/ubuntu/ccapp | |
| echo "🔒 Docker Hub Login" | |
| echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin | |
| echo "📦 Pull latest images" | |
| docker compose pull | |
| chmod +x switch-blue-green.sh health-check.sh rollback.sh | |
| echo "🔄 Execute Blue-Green deployment with auto rollback" | |
| if ./switch-blue-green.sh; then | |
| echo "✅ Deployment completed successfully" | |
| else | |
| echo "❌ Deployment failed, check rollback logs" | |
| if [ -f /tmp/rollback.log ]; then | |
| echo "📋 Rollback logs:" | |
| cat /tmp/rollback.log | |
| fi | |
| exit 1 | |
| fi |