Update gradle.yml #100
This file contains 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: 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 |