fix: Feed 상세 조회 QueryDSL 매핑 오류 해결 #23
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: Zipbap 관리자 서버 CI/CD (EC2 배포) | |
| on: | |
| push: | |
| branches: [ "main" ] | |
| workflow_dispatch: | |
| workflow_call: | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| if: | | |
| github.repository == 'Zipbap/Zipbap-BE' && | |
| github.actor != 'web-flow' && | |
| github.actor != 'dependabot[bot]' | |
| steps: | |
| - name: 코드 체크아웃 | |
| uses: actions/checkout@v3 | |
| - name: Docker Hub 로그인 | |
| uses: docker/login-action@v2 | |
| with: | |
| username: ${{ secrets.DOCKER_USERNAME }} | |
| password: ${{ secrets.DOCKER_PASSWORD }} | |
| - name: Docker 이미지 Build 및 Push | |
| run: | | |
| IMAGE_NAME=${{ secrets.DOCKER_USERNAME }}/zipbap-admin | |
| SHORT_SHA=$(echo "${GITHUB_SHA}" | cut -c1-7) | |
| echo "🔨 Build Start → $IMAGE_NAME ($SHORT_SHA)" | |
| docker build \ | |
| -t $IMAGE_NAME:latest \ | |
| -t $IMAGE_NAME:${SHORT_SHA} \ | |
| --build-arg SERVICE=api-admin . | |
| docker push $IMAGE_NAME:latest | |
| docker push $IMAGE_NAME:${SHORT_SHA} | |
| - name: SHORT_SHA 전달 | |
| id: meta | |
| run: | | |
| SHORT_SHA=$(echo "${GITHUB_SHA}" | cut -c1-7) | |
| echo "short_sha=${SHORT_SHA}" >> $GITHUB_OUTPUT | |
| outputs: | |
| short_sha: ${{ steps.meta.outputs.short_sha }} | |
| deploy: | |
| runs-on: ubuntu-latest | |
| needs: build | |
| if: | | |
| github.repository == 'Zipbap/Zipbap-BE' && | |
| github.actor != 'web-flow' && | |
| github.actor != 'dependabot[bot]' | |
| steps: | |
| - name: EC2에 배포 | |
| id: ssh_deploy | |
| uses: appleboy/ssh-action@v1.0.0 | |
| with: | |
| host: ${{ secrets.ADMIN_EC2_HOST }} | |
| username: ubuntu | |
| key: ${{ secrets.ADMIN_EC2_SSH_KEY }} | |
| script: | | |
| SHORT_SHA=${{ needs.build.outputs.short_sha }} | |
| IMAGE_NAME=${{ secrets.DOCKER_USERNAME }}/zipbap-admin | |
| echo "[1] AWS 자격 증명 구성" | |
| mkdir -p ~/.aws | |
| echo "[default]" > ~/.aws/credentials | |
| echo "aws_access_key_id=${{ secrets.ADMIN_AWS_ACCESS_KEY_ID }}" >> ~/.aws/credentials | |
| echo "aws_secret_access_key=${{ secrets.ADMIN_AWS_SECRET_ACCESS_KEY }}" >> ~/.aws/credentials | |
| echo "[2] AWS CLI 설치 보장" | |
| sudo apt-get update -y | |
| sudo apt-get install -y python3-pip unzip curl | |
| if ! command -v aws &> /dev/null; then | |
| echo "Installing AWS CLI via pip..." | |
| sudo pip install awscli | |
| fi | |
| aws --version || { echo "❌ AWS CLI 설치 실패"; exit 1; } | |
| echo "[3] 도커 네트워크 확인/생성" | |
| docker network inspect zipbap-net >/dev/null 2>&1 || docker network create zipbap-net | |
| echo "[4] SSM에서 설정(application-prod.yml) 가져오기" | |
| aws ssm get-parameter \ | |
| --name "/zipbap-admin/prod/application-prod.yml" \ | |
| --with-decryption \ | |
| --region ap-northeast-2 \ | |
| --query "Parameter.Value" \ | |
| --output text > /home/ubuntu/application-prod.yml | |
| echo "[5] 파일 검증" | |
| if [ ! -s /home/ubuntu/application-prod.yml ]; then | |
| echo "❌ application-prod.yml 비어 있음. 배포 중단." | |
| exit 1 | |
| fi | |
| echo "[6] 최신 이미지 Pull" | |
| docker pull $IMAGE_NAME:${SHORT_SHA} || docker pull $IMAGE_NAME:latest | |
| echo "[7] 기존 컨테이너 종료 및 삭제" | |
| docker stop zipbap-admin || true | |
| docker rm zipbap-admin || true | |
| echo "[8] 새 컨테이너 실행" | |
| docker run -d \ | |
| --name zipbap-admin \ | |
| --network zipbap-net \ | |
| -p 8080:8080 \ | |
| -e SPRING_PROFILES_ACTIVE=prod \ | |
| -v /home/ubuntu/application-prod.yml:/app/config/application-prod.yml \ | |
| $IMAGE_NAME:${SHORT_SHA} | |
| echo "[9] 임시 AWS 자격증명 삭제" | |
| rm -rf ~/.aws | |
| - name: Discord 알림 (성공) | |
| if: success() | |
| run: | | |
| sudo apt-get update && sudo apt-get install -y jq | |
| SHORT_SHA=${{ needs.build.outputs.short_sha }} | |
| COMMIT_MSG=$(jq -Rs . <<< "${{ github.event.head_commit.message }}") | |
| curl -H "Content-Type: application/json" \ | |
| -X POST \ | |
| -d "{ | |
| \"embeds\": [{ | |
| \"title\": \"✅ 배포 성공 (Admin)\", | |
| \"description\": \"zipbap-admin 서비스가 정상적으로 배포되었습니다! 🚀\", | |
| \"color\": 3066993, | |
| \"fields\": [ | |
| { \"name\": \"서비스\", \"value\": \"zipbap-admin\", \"inline\": true }, | |
| { \"name\": \"이미지 태그\", \"value\": \"${SHORT_SHA}\", \"inline\": true }, | |
| { \"name\": \"상태\", \"value\": \"성공 ✅\", \"inline\": true }, | |
| { \"name\": \"Commit SHA\", \"value\": \"\`${SHORT_SHA}\`\" }, | |
| { \"name\": \"Commit 메시지\", \"value\": ${COMMIT_MSG} }, | |
| { \"name\": \"배포자\", \"value\": \"@${GITHUB_ACTOR}\", \"inline\": true } | |
| ], | |
| \"footer\": { \"text\": \"GitHub Actions • main 브랜치\" }, | |
| \"timestamp\": \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\" | |
| }] | |
| }" \ | |
| ${{ secrets.DISCORD_WEBHOOK_URL }} | |
| - name: Discord 알림 (실패) | |
| if: failure() | |
| run: | | |
| sudo apt-get update && sudo apt-get install -y jq | |
| SHORT_SHA=${{ needs.build.outputs.short_sha }} | |
| COMMIT_MSG=$(jq -Rs . <<< "${{ github.event.head_commit.message }}") | |
| curl -H "Content-Type: application/json" \ | |
| -X POST \ | |
| -d "{ | |
| \"embeds\": [{ | |
| \"title\": \"❌ 배포 실패 (Admin)\", | |
| \"description\": \"zipbap-admin 서비스 배포 중 문제가 발생했습니다.\", | |
| \"color\": 15158332, | |
| \"fields\": [ | |
| { \"name\": \"서비스\", \"value\": \"zipbap-admin\", \"inline\": true }, | |
| { \"name\": \"이미지 태그\", \"value\": \"${SHORT_SHA}\", \"inline\": true }, | |
| { \"name\": \"상태\", \"value\": \"실패 ❌\", \"inline\": true }, | |
| { \"name\": \"Commit SHA\", \"value\": \"\`${SHORT_SHA}\`\" }, | |
| { \"name\": \"Commit 메시지\", \"value\": ${COMMIT_MSG} }, | |
| { \"name\": \"배포자\", \"value\": \"@${GITHUB_ACTOR}\", \"inline\": true } | |
| ], | |
| \"footer\": { \"text\": \"GitHub Actions • main 브랜치\" }, | |
| \"timestamp\": \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\" | |
| }] | |
| }" \ | |
| ${{ secrets.DISCORD_WEBHOOK_URL }} |