Skip to content

feat: 경매 추가 데이터 조회 API 구현 #116

feat: 경매 추가 데이터 조회 API 구현

feat: 경매 추가 데이터 조회 API 구현 #116

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