fix : 피드 상세 응답에 작성자 여부(isOwner) 반환 기능 추가 #26
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-api | |
| SHORT_SHA=$(echo "${GITHUB_SHA}" | cut -c1-7) | |
| docker build \ | |
| -t $IMAGE_NAME:latest \ | |
| -t $IMAGE_NAME:${SHORT_SHA} \ | |
| . | |
| 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에 배포 | |
| uses: appleboy/ssh-action@v1.0.0 | |
| with: | |
| host: ${{ secrets.EC2_HOST }} | |
| username: ubuntu | |
| key: ${{ secrets.EC2_SSH_KEY }} | |
| script: | | |
| SHORT_SHA=${{ needs.build.outputs.short_sha }} | |
| IMAGE_NAME=${{ secrets.DOCKER_USERNAME }}/zipbap-api | |
| echo "[1] AWS 자격 증명 구성" | |
| mkdir -p ~/.aws | |
| echo "[default]" > ~/.aws/credentials | |
| echo "aws_access_key_id=${{ secrets.AWS_ACCESS_KEY_ID }}" >> ~/.aws/credentials | |
| echo "aws_secret_access_key=${{ secrets.AWS_SECRET_ACCESS_KEY }}" >> ~/.aws/credentials | |
| echo "[2] awscli 설치 여부 확인" | |
| if ! command -v aws &> /dev/null | |
| then | |
| sudo apt-get update && sudo apt-get install -y unzip curl docker.io | |
| curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" | |
| unzip -o awscliv2.zip | |
| sudo ./aws/install | |
| sudo usermod -aG docker ubuntu || true | |
| fi | |
| echo "[3] 도커 네트워크 준비(zipbap-net)" | |
| docker network inspect zipbap-net >/dev/null 2>&1 || docker network create zipbap-net | |
| echo "[4] Parameter Store에서 prod.yml 갱신" | |
| aws ssm get-parameter \ | |
| --name "/zipbap/prod/application-prod.yml" \ | |
| --with-decryption \ | |
| --region ap-northeast-2 \ | |
| --query "Parameter.Value" \ | |
| --output text > /home/ubuntu/application-prod.yml | |
| echo "[5] 최신 이미지 pull" | |
| docker pull $IMAGE_NAME:${SHORT_SHA} || docker pull $IMAGE_NAME:latest | |
| echo "[6] 기존 컨테이너 종료 및 삭제" | |
| docker stop zipbap-api || true | |
| docker rm zipbap-api || true | |
| echo "[7] 새 컨테이너 실행" | |
| docker run -d \ | |
| --name zipbap-api \ | |
| --network zipbap-net \ | |
| -p 9090:8080 \ | |
| -e SPRING_PROFILES_ACTIVE=prod \ | |
| -v /home/ubuntu/application-prod.yml:/app/config/application-prod.yml \ | |
| $IMAGE_NAME:${SHORT_SHA} | |
| echo "[8] 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\": \"✅ 배포 성공 (API)\", | |
| \"description\": \"zipbap-api 서비스가 정상적으로 배포되었습니다! 🚀\", | |
| \"color\": 3066993, | |
| \"fields\": [ | |
| { \"name\": \"서비스\", \"value\": \"zipbap-api\", \"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\": \"❌ 배포 실패 (API)\", | |
| \"description\": \"zipbap-api 서비스 배포 중 문제가 발생했습니다.\", | |
| \"color\": 15158332, | |
| \"fields\": [ | |
| { \"name\": \"서비스\", \"value\": \"zipbap-api\", \"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 }} |