Merge pull request #48 from HANA-IEUM/test/couponServiceimpl-44 #55
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 Spring Boot to EC2 | |
| on: | |
| push: | |
| branches: [dev] | |
| jobs: | |
| build-and-deploy: | |
| runs-on: ubuntu-latest | |
| steps: | |
| # 1. GitHub Repository 체크아웃 | |
| - name: Checkout source code | |
| uses: actions/checkout@v3 | |
| # 2. JDK 21 설정 | |
| - name: Set up JDK 21 | |
| uses: actions/setup-java@v3 | |
| with: | |
| distribution: 'temurin' | |
| java-version: '21' | |
| # 3. Gradle 빌드 (테스트 제외) | |
| - name: Build with Gradle | |
| run: | | |
| chmod +x ./gradlew | |
| ./gradlew clean build -x test | |
| # 4. 빌드된 JAR 파일 EC2로 복사 | |
| - name: Copy JAR to EC2 | |
| uses: appleboy/scp-action@v0.1.3 | |
| with: | |
| host: ${{ secrets.EC2_HOST }} | |
| username: ${{ secrets.EC2_USER }} | |
| key: ${{ secrets.EC2_SSH_KEY }} | |
| source: "build/libs/*.jar" | |
| target: "/home/ubuntu/app" | |
| strip_components: 2 | |
| # 5. EC2에서 애플리케이션 실행 | |
| - name: Run Spring Boot App on EC2 | |
| uses: appleboy/ssh-action@master | |
| with: | |
| host: ${{ secrets.EC2_HOST }} | |
| username: ${{ secrets.EC2_USER }} | |
| key: ${{ secrets.EC2_SSH_KEY }} | |
| script: | | |
| echo " 기존 애플리케이션 종료 시도 (8080 포트)" | |
| sudo lsof -t -i:8080 | xargs --no-run-if-empty sudo kill -9 | |
| sleep 3 | |
| echo "새 애플리케이션 실행" | |
| cd /home/ubuntu/app | |
| JAR_FILE=$(ls *.jar | grep -v 'plain' | head -n 1) | |
| if [ -z "$JAR_FILE" ]; then | |
| echo "JAR 파일을 찾을 수 없습니다" | |
| exit 1 | |
| fi | |
| echo "실행할 JAR 파일: $JAR_FILE" | |
| # GitHub Secrets를 환경변수로 설정 | |
| export DB_URL="${{ secrets.DB_URL }}" | |
| export DB_USERNAME="${{ secrets.DB_USERNAME }}" | |
| export DB_PASSWORD="${{ secrets.DB_PASSWORD }}" | |
| export JWT_SECRET="${{ secrets.JWT_SECRET }}" | |
| export JWT_ACCESS_EXPIRATION="${{ secrets.JWT_ACCESS_EXPIRATION }}" | |
| export JWT_REFRESH_EXPIRATION="${{ secrets.JWT_REFRESH_EXPIRATION }}" | |
| export CORS_ALLOWED_ORIGINS="${{ secrets.CORS_ALLOWED_ORIGINS }}" | |
| export SOLAPI_API_KEY="${{ secrets.SOLAPI_API_KEY }}" | |
| export SOLAPI_API_SECRET="${{ secrets.SOLAPI_API_SECRET }}" | |
| export SOLAPI_SENDER="${{ secrets.SOLAPI_SENDER }}" | |
| export AWS_ACCESS_KEY_ID="${{ secrets.AWS_ACCESS_KEY_ID }}" | |
| export AWS_SECRET_ACCESS_KEY="${{ secrets.AWS_SECRET_ACCESS_KEY }}" | |
| nohup java -jar "$JAR_FILE" > app.log 2>&1 & | |
| echo "애플리케이션 시작 대기 및 확인" | |
| sleep 10 | |
| if pgrep -f "$JAR_FILE"; then | |
| echo "애플리케이션이 성공적으로 시작되었습니다." | |
| else | |
| echo "애플리케이션 시작 실패. 최근 로그 확인:" | |
| tail -50 app.log | |
| exit 1 | |
| fi |