[Merge] SortedSet을 활용한 매칭 점수 정렬 캐싱 - #125 #181
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: Java CI/CD with Gradle | |
| on: | |
| push: | |
| branches: [ "dev" ] | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| steps: | |
| - uses: actions/checkout@v4 | |
| # 🔥 SSH 키 디코딩을 가장 먼저 수행 | |
| - name: Decode SSH Key | |
| run: | | |
| echo "${{ secrets.AWS_PRIVATE_KEY }}" | base64 --decode > private_key.pem | |
| chmod 600 private_key.pem | |
| - name: Set up SSH tunnel to EC2 | |
| run: | | |
| ssh -o StrictHostKeyChecking=no -N -L 13306:${{ secrets.RDS_HOST }}:3306 ubuntu@${{ secrets.EC2_PUBLIC_IP }} -i private_key.pem & | |
| - name: Set up JDK 17 | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: '17' | |
| distribution: 'temurin' | |
| - name: Setup Gradle | |
| uses: gradle/actions/setup-gradle@v4 | |
| # ✅ Jasypt 복호화를 위한 환경변수 추가 | |
| - name: Build without Tests | |
| env: | |
| JASYPT_SECRET_KEY: ${{ secrets.JASYPT_SECRET_KEY }} | |
| run: ./gradlew build -x test | |
| - name: Debug Build Output | |
| run: ls -lah build/libs/ | |
| # 🚀 기존 JAR 파일 삭제 (업로드 전 안전하게 삭제) | |
| - name: Remove Old JAR from EC2 | |
| run: | | |
| ssh -o StrictHostKeyChecking=no -i private_key.pem ubuntu@${{ secrets.EC2_PUBLIC_IP }} << 'EOF' | |
| echo "Deleting old application files..." | |
| rm -rf /home/ubuntu/app.jar /home/ubuntu/app.tar.gz | |
| EOF | |
| # 🚀 압축 후 업로드 (JAR을 tar.gz으로 압축) | |
| - name: Upload JAR to EC2 (Optimized) | |
| run: | | |
| echo "Finding correct JAR file..." | |
| JAR_FILE=$(ls build/libs/*.jar | grep -v plain | head -n 1) | |
| if [ -z "$JAR_FILE" ]; then | |
| echo "ERROR: No valid JAR file found!" | |
| exit 1 | |
| fi | |
| echo "Compressing JAR file..." | |
| tar czf app.tar.gz -C build/libs $(basename $JAR_FILE) | |
| echo "Uploading JAR to EC2..." | |
| scp -o StrictHostKeyChecking=no -i private_key.pem app.tar.gz ubuntu@${{ secrets.EC2_PUBLIC_IP }}:/home/ubuntu/ | |
| # 🚀 배포 및 실행 | |
| - name: Deploy to EC2 | |
| run: | | |
| ssh -o StrictHostKeyChecking=no -i private_key.pem ubuntu@${{ secrets.EC2_PUBLIC_IP }} << 'EOF' | |
| echo "Stopping old application..." | |
| pids=$(pgrep -f 'java -jar') | |
| if [ -n "$pids" ]; then | |
| echo "Killing process: $pids" | |
| kill -9 $pids | |
| else | |
| echo "No process found." | |
| fi | |
| echo "Extracting new application..." | |
| tar xzf /home/ubuntu/app.tar.gz -C /home/ubuntu/ | |
| echo "Finding correct JAR file..." | |
| APP_JAR=$(ls /home/ubuntu/*.jar | grep -v plain | head -n 1) | |
| if [ -z "$APP_JAR" ]; then | |
| echo "ERROR: No valid JAR file found!" | |
| exit 1 | |
| fi | |
| echo "Starting new application with $APP_JAR..." | |
| export JASYPT_SECRET_KEY=${{ secrets.JASYPT_SECRET_KEY }} | |
| nohup java -jar $APP_JAR --spring.profiles.active=prod > /home/ubuntu/app.log 2>&1 & | |
| echo "Application started successfully!" | |
| EOF | |
| dependency-submission: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up JDK 17 | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: '17' | |
| distribution: 'temurin' | |
| - name: Generate and submit dependency graph | |
| uses: gradle/actions/dependency-submission@v4.0.0 |