feat: 경매 추가 데이터 조회 API 구현 #116
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 | |
| on: | |
| workflow_dispatch: | |
| push: | |
| branches: | |
| - main | |
| jobs: | |
| deploy: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v3 | |
| - name: Set up JDK 21 | |
| uses: actions/setup-java@v3 | |
| with: | |
| java-version: '21' | |
| distribution: 'corretto' | |
| cache: gradle | |
| - name: Grant execute permission for gradlew | |
| run: chmod +x ./gradlew | |
| - name: Build with Gradle | |
| run: ./gradlew bootjar | |
| - name: Remove existing jar file | |
| uses: appleboy/ssh-action@master | |
| with: | |
| host: ${{ secrets.SSH_HOST }} | |
| username: ${{ secrets.SSH_USER }} | |
| key: ${{ secrets.SSH_PRIVATE_KEY }} | |
| port: ${{ secrets.SSH_PORT }} | |
| script: | | |
| echo "Remove existing jar file..." | |
| rm -f /home/ubuntu/build/libs/auction-api.jar | |
| - name: Copy JAR to server | |
| uses: appleboy/scp-action@master | |
| with: | |
| host: ${{ secrets.SSH_HOST }} | |
| username: ${{ secrets.SSH_USER }} | |
| key: ${{ secrets.SSH_PRIVATE_KEY }} | |
| port: ${{ secrets.SSH_PORT }} | |
| source: "build/libs/auction-api.jar" | |
| target: "/home/ubuntu" | |
| # 프로세스 종료 단계 | |
| - name: Stop existing application | |
| uses: appleboy/ssh-action@master | |
| with: | |
| host: ${{ secrets.SSH_HOST }} | |
| username: ${{ secrets.SSH_USER }} | |
| key: ${{ secrets.SSH_PRIVATE_KEY }} | |
| port: ${{ secrets.SSH_PORT }} | |
| script: | | |
| echo "Checking for existing application process..." | |
| if pgrep -f "auction-api.jar"; then | |
| echo "Stopping existing application..." | |
| sudo pkill -f "auction-api.jar" || echo "Failed to kill process, but continuing..." | |
| echo "Waiting for process to terminate..." | |
| sleep 10 | |
| else | |
| echo "No existing application process found." | |
| fi | |
| echo "Checking if port 8080 is in use..." | |
| if sudo lsof -i :8080; then | |
| echo "Force killing process on port 8080..." | |
| sudo fuser -k 8080/tcp || echo "Failed to kill process on port 8080, but continuing..." | |
| sleep 5 | |
| else | |
| echo "Port 8080 is free." | |
| fi | |
| continue-on-error: true | |
| # 애플리케이션 시작 | |
| - name: Start application | |
| uses: appleboy/ssh-action@master | |
| with: | |
| host: ${{ secrets.SSH_HOST }} | |
| username: ${{ secrets.SSH_USER }} | |
| key: ${{ secrets.SSH_PRIVATE_KEY }} | |
| port: ${{ secrets.SSH_PORT }} | |
| envs: AWS_ACCESS_KEY,AWS_SECRET_KEY,AWS_REGION | |
| script: | | |
| echo "Starting application..." | |
| cd /home/ubuntu | |
| # Set environment variables | |
| export AWS_ACCESS_KEY=${{ secrets.AWS_ACCESS_KEY }} | |
| export AWS_SECRET_KEY=${{ secrets.AWS_SECRET_KEY }} | |
| export AWS_REGION=ap-northeast-2 | |
| # Start the application | |
| nohup java -jar /home/ubuntu/build/libs/auction-api.jar \ | |
| --spring.profiles.active=prod \ | |
| > /tmp/app.log 2>&1 < /dev/null & | |
| # Store the PID | |
| APP_PID=$! | |
| echo "Application started with PID: $APP_PID" | |
| # Wait for application to start with timeout | |
| MAX_ATTEMPTS=15 | |
| ATTEMPTS=0 | |
| while [ $ATTEMPTS -lt $MAX_ATTEMPTS ]; do | |
| echo "Checking application health... (Attempt $((ATTEMPTS + 1))/$MAX_ATTEMPTS)" | |
| if curl -f http://localhost:8080/actuator/health; then | |
| echo "Application is healthy" | |
| break | |
| fi | |
| ATTEMPTS=$((ATTEMPTS + 1)) | |
| sleep 5 | |
| done | |
| if [ $ATTEMPTS -eq $MAX_ATTEMPTS ]; then | |
| echo "Application failed to start within timeout period" | |
| echo "Recent application logs:" | |
| sudo tail -n 200 /tmp/app.log | |
| exit 1 | |
| fi | |
| echo "Application startup completed successfully" | |
| echo "Recent application logs:" | |
| sudo tail -n 100 /tmp/app.log | |
| # Verify the process is still running | |
| if ! kill -0 $APP_PID 2>/dev/null; then | |
| echo "Application process is not running" | |
| echo "Recent application logs:" | |
| sudo tail -n 200 /tmp/app.log | |
| exit 1 | |
| fi | |
| echo "Deployment completed successfully" | |
| exit 0 |