Backend Deploy To AWS #105
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: Backend Deploy To AWS | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| reason: | |
| description: 'Reason for deployment' | |
| required: false | |
| type: string | |
| default: 'Manual deployment' | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v3 | |
| with: | |
| ref: main # Always deploy from main branch | |
| - name: Display deployment info | |
| run: | | |
| echo "🚀 Deploying to production" | |
| echo "📝 Reason: ${{ github.event.inputs.reason }}" | |
| echo "🌿 Branch: main" | |
| echo "👤 Triggered by: ${{ github.actor }}" | |
| - name: JDK 21 설정 | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: '21' | |
| distribution: 'temurin' | |
| java-package: 'jdk' | |
| check-latest: false | |
| server-id: 'github' | |
| server-username: ${{ github.actor }} | |
| server-password: ${{ secrets.GITHUB_TOKEN }} | |
| overwrite-settings: true | |
| - name: Cache Gradle packages | |
| uses: actions/cache@v3 | |
| with: | |
| path: ~/.gradle | |
| key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} | |
| restore-keys: ${{ runner.os }}-gradle | |
| - name: Make gradlew executable | |
| run: chmod +x backEnd/gradlew | |
| - name: Build with Gradle | |
| working-directory: backEnd | |
| run: ./gradlew clean build | |
| - name: Login to Docker Hub | |
| run: docker login -u "${{ secrets.DOCKER_USERNAME }}" -p "${{ secrets.DOCKER_PASSWORD }}" | |
| - name: Build Docker image | |
| working-directory: backEnd | |
| run: | | |
| docker build . -t ${{ secrets.DOCKER_USERNAME }}/bidflow:${{ github.sha }} | |
| docker tag ${{ secrets.DOCKER_USERNAME }}/bidflow:${{ github.sha }} ${{ secrets.DOCKER_USERNAME }}/bidflow:latest | |
| - name: Push Docker image to Docker Hub | |
| run: | | |
| docker push ${{ secrets.DOCKER_USERNAME }}/bidflow:${{ github.sha }} | |
| docker push ${{ secrets.DOCKER_USERNAME }}/bidflow:latest | |
| - name: Deploy to server | |
| uses: appleboy/ssh-action@v1.0.3 | |
| with: | |
| host: ${{ secrets.EC2_HOST }} | |
| username: ${{ secrets.EC2_USER }} | |
| key: ${{ secrets.EC2_SSH_KEY }} | |
| port: 22 | |
| script: | | |
| # application.yml 파일 생성 | |
| echo '${{ secrets.APPLICATION_YML }}' > /home/ubuntu/application.yml | |
| # Docker 네트워크 생성 (존재하지 않는 경우만) | |
| sudo docker network create auction-network || true | |
| # Docker 컨테이너 실행 | |
| sudo docker pull ${{ secrets.DOCKER_USERNAME }}/bidflow:${{ github.sha }} | |
| sudo docker stop bidflow || true | |
| sudo docker rm bidflow || true | |
| # Docker 컨테이너 실행 (네트워크 연결 포함) | |
| sudo docker run -d \ | |
| -p 8080:8080 \ | |
| --name bidflow \ | |
| --network auction-network \ | |
| --restart always \ | |
| -v /home/ubuntu/application.yml:/app/config/application.yml \ | |
| -e SPRING_CONFIG_ADDITIONAL_LOCATION="file:/app/config/" \ | |
| ${{ secrets.DOCKER_USERNAME }}/bidflow:${{ github.sha }} |