Update gradle.yml #98
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" ] # ✅ 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 | ||
cat ./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 | ||
cat ./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 | ||
cat ./backend/src/main/resources/application-dev.properties | ||
fi | ||
- name: Setup Gradle | ||
uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3.1.0 | ||
- 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: | | ||
# ✅ 환경에 맞는 EC2 키 및 호스트 설정 | ||
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 | ||
# ✅ SSH 키 권한 설정 | ||
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; } | ||
# ✅ 기존 실행 중인 프로세스를 안전하게 종료 (SSH 세션 종료 방지) | ||
echo "Stopping existing Java process on EC2..." | ||
ssh -i sync_spot.pem -o StrictHostKeyChecking=no -o ServerAliveInterval=60 ${{ secrets.EC2_USERNAME }}@$scp_host " | ||
echo 'Stopping existing application...'; | ||
pgrep java && pkill -9 -f 'java' || echo 'No Java process found.'; | ||
sleep 2 | ||
" | ||
# ✅ 빌드된 JAR 파일 배포 (속도 제한 제거 및 Keep-Alive 설정 추가) | ||
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 세션 종료 보장) | ||
ssh -i sync_spot.pem -o StrictHostKeyChecking=no -o ServerAliveInterval=60 ${{ secrets.EC2_USERNAME }}@$scp_host << EOF | ||
echo 'Starting new application...'; | ||
nohup java -jar /home/${{ secrets.EC2_USERNAME }}/backend-0.0.1-SNAPSHOT.jar --spring.profiles.active=$profile > /dev/null 2>&1 & disown | ||
EOF | ||
# ✅ SSH 키 파일 삭제 | ||
rm -f sync_spot.pem |