[Feat/176] 포지션 자료형 int -> ENUM 변경 #90
Workflow file for this run
This file contains 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: 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 |