Skip to content

Update gradle.yml

Update gradle.yml #100

Workflow file for this run

name: Java CI with Gradle
on:
push:
branches: [ "develop", "master" ]
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
# ✅ 공통 application-common.properties 생성
- run: |
touch ./backend/src/main/resources/application-common.properties
echo "${{ secrets.COMMON_PROPERTIES }}" > ./backend/src/main/resources/application-common.properties
# ✅ 환경별 application-main.properties 또는 application-dev.properties 설정
- run: |
if [[ "${{ github.ref }}" == "refs/heads/master" ]]; then
touch ./backend/src/main/resources/application-main.properties
echo "${{ secrets.MAIN_PROPERTIES }}" > ./backend/src/main/resources/application-main.properties
else
touch ./backend/src/main/resources/application-dev.properties
echo "${{ secrets.DEV_PROPERTIES }}" > ./backend/src/main/resources/application-dev.properties
fi
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v3
- name: Set Gradle Wrapper executable permission
run: chmod +x ./backend/gradlew
- name: Build with Gradle Wrapper
run: cd backend/ && ./gradlew build
- name: Upload build artifact
uses: actions/upload-artifact@v4
with:
name: backend
path: ./backend/build/libs/backend-0.0.1-SNAPSHOT.jar
deploy:
needs: build
runs-on: ubuntu-latest
steps:
- name: Download build artifact
uses: actions/download-artifact@v4
with:
name: backend
path: ./backend/build/libs/
- name: Deploy to EC2
run: |
if [[ "${{ github.ref }}" == "refs/heads/master" ]]; then
echo "${{ secrets.MAIN_EC2_PEM }}" > sync_spot.pem
scp_host="${{ secrets.MAIN_EC2_HOST }}"
profile="common,main"
else
echo "${{ secrets.DEV_EC2_PEM }}" > sync_spot.pem
scp_host="${{ secrets.DEV_EC2_HOST }}"
profile="common,dev"
fi
chmod 600 sync_spot.pem
# ✅ SSH 연결 테스트 (연결 실패 시 종료)
echo "Testing SSH connection to $scp_host..."
ssh -i sync_spot.pem -o StrictHostKeyChecking=no -o ConnectTimeout=10 ${{ secrets.EC2_USERNAME }}@$scp_host "echo 'SSH connection successful.'" || { echo "SSH connection failed"; exit 255; }
# ✅ 기존 실행 중인 프로세스를 안전하게 종료
echo "Stopping existing Java process on EC2..."
ssh -i sync_spot.pem -o StrictHostKeyChecking=no -o ServerAliveInterval=60 ${{ secrets.EC2_USERNAME }}@$scp_host "
if pgrep java; then pkill -9 -f 'java'; echo 'Process stopped'; else echo 'No Java process found'; fi
"
# ✅ 빌드된 JAR 파일 배포
echo "Uploading new application..."
scp -i sync_spot.pem -o StrictHostKeyChecking=no -o ServerAliveInterval=60 ./backend/build/libs/backend-0.0.1-SNAPSHOT.jar \
${{ secrets.EC2_USERNAME }}@$scp_host:/home/${{ secrets.EC2_USERNAME }}/backend-0.0.1-SNAPSHOT.jar
# ✅ 새 애플리케이션 실행 (SSH 세션 분리로 안정성 확보)
echo "Starting new application..."
ssh -i sync_spot.pem -o StrictHostKeyChecking=no -o ServerAliveInterval=60 ${{ secrets.EC2_USERNAME }}@$scp_host "
nohup java -jar /home/${{ secrets.EC2_USERNAME }}/backend-0.0.1-SNAPSHOT.jar --spring.profiles.active=$profile > /dev/null 2>&1 & disown
"
# ✅ SSH 키 파일 삭제
rm -f sync_spot.pem