Skip to content

[BUG #341]: 영상을 위한 시중카드 검색 기능 복구 (#343) #77

[BUG #341]: 영상을 위한 시중카드 검색 기능 복구 (#343)

[BUG #341]: 영상을 위한 시중카드 검색 기능 복구 (#343) #77

Workflow file for this run

name: Deploy to EC2
# develop 브랜치에 push될 때만 워크플로우 실행
on:
push:
branches: [ develop ]
# 동시에 여러 배포가 실행되지 않도록 설정 (같은 브랜치에 여러 푸시가 겹치면 이전 실행 취소)
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
# 1. Docker 이미지 빌드 및 Docker Hub에 푸시
build:
name: Build & Push Docker Image
runs-on: ubuntu-latest
# 다음 job에서 사용할 output 정의
outputs:
IMAGE_TAG: ${{ steps.set_tag.outputs.IMAGE_TAG }}
steps:
# 저장소 checkout
- name: Checkout repo
uses: actions/checkout@v4
# JDK 설정 (WAR 빌드용)
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17'
# Gradle로 WAR 파일 빌드
- name: Build WAR file
run: ./gradlew clean build
# Docker Hub 로그인
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
# Docker 이미지 빌드 및 Docker Hub에 푸시
- name: Build & push Docker image
id: docker_build
uses: docker/build-push-action@v6
with:
context: .
push: true
tags: |
gyehyunbak/payper-server:latest
gyehyunbak/payper-server:${{ github.sha }}
# 현재 커밋 SHA를 이미지 태그로 설정
- name: Set IMAGE_TAG output
id: set_tag
run: |
echo "IMAGE_TAG=${GITHUB_SHA}" >> $GITHUB_OUTPUT
# 2. docker-compose.yml 파일만 EC2로 전송
upload-compose:
name: Upload docker-compose.yml
needs: build # build 완료 후에 실행
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v3
# 최신 docker-compose.yml 파일을 EC2에 복사
- name: Upload docker-compose.yml to EC2
uses: appleboy/scp-action@v1.0.0
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USER }}
key: ${{ secrets.EC2_SSH_KEY }}
source: docker-compose.yml
target: ~/payper-app/
# 3. .env 파일을 actions 내에서 생성 후 EC2에 업로드
upload-env:
name: Upload .env to EC2
needs: build # build 완료 후에 실행
runs-on: ubuntu-latest
steps:
- name: Create .env file
run: |
echo "IMAGE_TAG=${{ needs.build.outputs.IMAGE_TAG }}" > .env
echo "DEMO_CLIENT_ID=${{ secrets.DEMO_CLIENT_ID }}" >> .env
echo "DEMO_CLIENT_SECRET=${{ secrets.DEMO_CLIENT_SECRET }}" >> .env
echo "PUBLIC_KEY=${{ secrets.PUBLIC_KEY }}" >> .env
echo "JDBC_DRIVER=${{ secrets.JDBC_DRIVER }}" >> .env
echo "JDBC_URL=${{ secrets.JDBC_URL }}" >> .env
echo "JDBC_USERNAME=${{ secrets.JDBC_USERNAME }}" >> .env
echo "JDBC_PASSWORD=${{ secrets.JDBC_PASSWORD }}" >> .env
echo "OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}" >> .env
echo "OPENAI_API_URL=${{ secrets.OPENAI_API_URL }}" >> .env
echo "KAKAO_CLIENT_ID=${{ secrets.KAKAO_CLIENT_ID }}" >> .env
echo "KAKAO_CLIENT_SECRET=${{ secrets.KAKAO_CLIENT_SECRET }}" >> .env
echo "KAKAO_REDIRECT_URI=${{ secrets.KAKAO_REDIRECT_URI }}" >> .env
echo "KAKAO_TOKEN_URL=${{ secrets.KAKAO_TOKEN_URL }}" >> .env
echo "KAKAO_USER_INFO_URL=${{ secrets.KAKAO_USER_INFO_URL }}" >> .env
echo "KAKAO_MAP_KEY=${{ secrets.KAKAO_MAP_KEY }}" >> .env
echo "KAKAO_MAP_URL=${{ secrets.KAKAO_MAP_URL }}" >> .env
echo "TOKEN_SECRET_KEY=${{ secrets.TOKEN_SECRET_KEY }}" >> .env
echo "FIREBASE_CREDENTIALS_PATH=/etc/secrets/firebase-service-account.json" >> .env
- name: Upload .env to EC2
uses: appleboy/scp-action@v1.0.0
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USER }}
key: ${{ secrets.EC2_SSH_KEY }}
source: .env
target: ~/payper-app/
# 5. EC2에서 컨테이너 재시작
deploy:
name: Restart container on EC2
needs: [build, upload-compose, upload-env] # build & upload-compose & upload-env 완료 후 실행
runs-on: ubuntu-latest
steps:
- name: SSH and restart
uses: appleboy/ssh-action@v1.2.2
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USER }}
key: ${{ secrets.EC2_SSH_KEY }}
script: |
cd ~/payper-app
docker compose down --remove-orphans
docker compose pull gyehyunbak/payper-server:${{ needs.build.outputs.IMAGE_TAG }}
docker compose up -d --remove-orphans
docker system prune -f --filter "label=compose-service"
docker image prune -a -f