Skip to content

[Feat/176] 포지션 자료형 int -> ENUM 변경 #90

[Feat/176] 포지션 자료형 int -> ENUM 변경

[Feat/176] 포지션 자료형 int -> ENUM 변경 #90

Workflow file for this run

name: Gamegoo v2 API CI/CD Pipeline
on:
pull_request:
types: [ closed ]
branches:
- develop
workflow_dispatch: # 수동 실행 가능
jobs:
build-and-deploy: # Job 이름
runs-on: ubuntu-latest # 실행 환경 - 가장 최신 버전 Ubuntu 환경
env: # 전체 job에서 사용할 환경 변수 설정
JWT_SECRET: ${{ secrets.JWT_SECRET }}
RDS_PRIVATE_IP: ${{ secrets.RDS_PRIVATE_IP }}
RDS_PORT: ${{ secrets.RDS_PORT }}
DB_SCHEMA_NAME: ${{ secrets.DB_SCHEMA_NAME }}
DB_USERNAME: ${{ secrets.DB_USERNAME }}
DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
GMAIL_PWD: ${{ secrets.GMAIL_PWD }}
RIOT_API: ${{ secrets.RIOT_API }}
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
SOCKET_SERVER_URL: ${{ secrets.SOCKET_SERVER_URL }}
steps:
# 1. GitHub Repository 파일 불러오기
- name: Github Repository 파일 불러오기
uses: actions/checkout@v4
# 2. 권한 설정
- name: gradlew 권한 설정
run: chmod +x ./gradlew
shell: bash
# 3. JDK 17 설치
- name: JDK 17 설치
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
# 4. Docker 확장 기능 추가
- name: Docker 확장 기능 추가
uses: docker/setup-buildx-action@v3
# 5. Docker Hub 로그인
- name: Docker Hub 로그인
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
# 6. Docker 이미지 생성 및 Push
- name: Docker 이미지 생성 및 push
uses: docker/build-push-action@v6
with:
context: . # Dockerfile 위치
file: ./Dockerfile # Dockerfile 경로
push: true
tags: ${{ secrets.DOCKERHUB_USERNAME }}/gamegoo-api-v2:${{ github.sha }} # 이미지 태그
platforms: linux/amd64
build-args: | # Dockerfile에서 사용할 환경 변수 전달
JWT_SECRET= ${{ secrets.JWT_SECRET }}
RDS_PRIVATE_IP= ${{ secrets.RDS_PRIVATE_IP }}
RDS_PORT= ${{ secrets.RDS_PORT }}
DB_SCHEMA_NAME= ${{ secrets.DB_SCHEMA_NAME }}
DB_USERNAME= ${{ secrets.DB_USERNAME }}
DB_PASSWORD= ${{ secrets.DB_PASSWORD }}
GMAIL_PWD= ${{ secrets.GMAIL_PWD }}
RIOT_API= ${{ secrets.RIOT_API }}
SOCKET_SERVER_URL= ${{ secrets.SOCKET_SERVER_URL }}
## CD (Continuous Deployment) 파트
# 7. EC2에 SSH로 접속하여 Docker 컨테이너 실행
- name: EC2에 배포
uses: appleboy/[email protected]
with:
host: ${{ secrets.EC2_HOST }} # EC2 퍼블릭 IP
username: ubuntu # EC2 사용자 (기본은 ubuntu)
key: ${{ secrets.EC2_SSH_KEY }} # EC2 SSH Private Key
script_stop: true # SSH 명령어 실행 중 에러가 발생하면 워크플로 중단
script: |
sudo fuser -k -n tcp 8080 || true
docker rm -f gamegoo-api-v2
docker pull ${{ secrets.DOCKERHUB_USERNAME }}/gamegoo-api-v2:${{ github.sha }}
docker run -d -p 8080:8080 --name gamegoo-api-v2 \
-e SPRING_PROFILES_ACTIVE=dev \
-e JWT_SECRET=${{ secrets.JWT_SECRET }} \
-e RDS_PRIVATE_IP=${{ secrets.RDS_PRIVATE_IP }} \
-e RDS_PORT=${{ secrets.RDS_PORT }} \
-e DB_SCHEMA_NAME=${{ secrets.DB_SCHEMA_NAME }} \
-e DB_USERNAME=${{ secrets.DB_USERNAME }} \
-e DB_PASSWORD=${{ secrets.DB_PASSWORD }} \
-e GMAIL_PWD=${{ secrets.GMAIL_PWD }} \
-e RIOT_API=${{ secrets.RIOT_API }} \
-e SOCKET_SERVER_URL=${{ secrets.SOCKET_SERVER_URL }} \
${{ secrets.DOCKERHUB_USERNAME }}/gamegoo-api-v2:${{ github.sha }}
# 실패 시 디스코드에 알림 보내기
- name: 배포 실패 시 디스코드 알림 전송
if: failure() # 이전 스텝이 실패한 경우에만 실행
run: |
PR_NUMBER="${{ github.event.pull_request.number }}"
PR_TITLE="${{ github.event.pull_request.title }}"
PR_AUTHOR="${{ github.event.pull_request.user.login }}"
PR_URL="${{ github.event.pull_request.html_url }}"
curl -X POST -H "Content-Type: application/json" \
-d "{\"content\": \"🚨 **Gamegoo v2 API 배포 실패** 🚨\nPR 번호: ${PR_NUMBER}\nPR 제목: ${PR_TITLE}\nPR 작성자: ${PR_AUTHOR}\n[PR 보기](${PR_URL})\"}" \
$DISCORD_WEBHOOK_URL