[BUG #341]: 영상을 위한 시중카드 검색 기능 복구 (#343) #77
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: 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 |