2626
2727 - name : Build with Gradle
2828 run : |
29- # Maven Central 403 에러 대비 재시도
29+ # Maven Central 403 에러 대비 재시도 로직 유지
3030 for i in {1..3}; do
3131 ./gradlew clean build -x test && break || {
3232 echo "Build attempt $i failed, retrying in 10 seconds..."
@@ -41,54 +41,76 @@ jobs:
4141
4242 - name : Deploy to EC2
4343 run : |
44- # EC2에서 기존 파일 정리
44+ # 1. 빌드된 JAR 파일 찾기 (BE-로 시작하고 plain이 아닌 파일)
45+ JAR_FILE_PATH=$(find build/libs/ -name "BE-*.jar" ! -name "*plain*" | head -n 1)
46+
47+ if [ -z "$JAR_FILE_PATH" ]; then
48+ echo "Error: No JAR file found in build/libs/"
49+ exit 1
50+ fi
51+
52+ echo "Target JAR to transfer: $JAR_FILE_PATH"
53+
54+ # 2. EC2에서 기존 파일 및 잘못된 디렉토리 정리
55+ # 특히 app-new.jar가 디렉토리인 경우를 대비해 rm -rf를 사용합니다.
4556 ssh -i private_key.pem -o StrictHostKeyChecking=no -o ConnectTimeout=10 \
4657 ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} << 'EOF'
47- # app.jar가 디렉토리면 삭제, 파일이면 백업
48- if [ -d /home/ubuntu/app.jar ]; then
49- sudo rm -rf /home/ubuntu/app.jar
50- elif [ -f /home/ubuntu/app.jar ]; then
51- sudo mv /home/ubuntu/app.jar /home/ubuntu/app.jar.backup
58+ # 기존에 잘못 생성된 디렉토리나 파일 삭제
59+ sudo rm -rf /home/ubuntu/app-new.jar
60+
61+ # 기존 실행 중인 파일 백업 (파일이 존재할 때만)
62+ if [ -f /home/ubuntu/app.jar ]; then
63+ sudo cp /home/ubuntu/app.jar /home/ubuntu/app.jar.backup
5264 fi
5365 EOF
5466
55- # JAR 파일 전송
56- JAR_FILE=$(ls build/libs/BE-*.jar | grep -v plain)
57- echo "Transferring: $JAR_FILE"
67+ # 3. JAR 파일 전송
68+ echo "Transferring JAR to EC2..."
5869 scp -i private_key.pem -o StrictHostKeyChecking=no -o ConnectTimeout=10 \
59- $JAR_FILE ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }}:/home/ubuntu/app-new.jar
70+ $JAR_FILE_PATH ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }}:/home/ubuntu/app-new.jar
6071
61- # 파일 전송 검증 및 배포
72+ # 4. 파일 검증 및 서비스 재시작
6273 ssh -i private_key.pem -o StrictHostKeyChecking=no -o ConnectTimeout=10 \
6374 ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} << 'EOF'
64- # 전송된 파일 검증
75+ set -e # 에러 발생 시 스크립트 중단
76+
77+ # 전송된 파일이 존재하는지 확인 (파일 형태인지 -f 체크)
6578 if [ ! -f /home/ubuntu/app-new.jar ]; then
66- echo "Error: app-new.jar not found"
79+ echo "Error: app-new.jar not found or is not a file "
6780 exit 1
6881 fi
6982
70- # 파일 크기 확인 (최소 1MB 이상이어야 함 )
83+ # 파일 크기 확인 (최소 1MB 이상 )
7184 size=$(stat -c%s /home/ubuntu/app-new.jar)
7285 if [ $size -lt 1000000 ]; then
73- echo "Error: JAR file too small ($size bytes)"
86+ echo "Error: JAR file too small ($size bytes). Transfer might have failed. "
7487 exit 1
7588 fi
7689
7790 # JAR 파일 유효성 검증
7891 if ! unzip -t /home/ubuntu/app-new.jar > /dev/null 2>&1; then
79- echo "Error: Invalid JAR file"
92+ echo "Error: Invalid or corrupted JAR file"
8093 exit 1
8194 fi
8295
8396 echo "JAR file validated successfully (size: $size bytes)"
8497
8598 # 서비스 중지 후 파일 교체 및 재시작
99+ echo "Restarting studylink service..."
86100 sudo systemctl stop studylink
87101 sudo mv /home/ubuntu/app-new.jar /home/ubuntu/app.jar
88102 sudo chown ubuntu:ubuntu /home/ubuntu/app.jar
89103 sudo systemctl start studylink
90- sleep 3
91- sudo systemctl status studylink
104+
105+ # 서비스 상태 확인
106+ sleep 5
107+ if sudo systemctl is-active studylink > /dev/null; then
108+ echo "Service is running successfully"
109+ else
110+ echo "Service failed to start. Checking logs..."
111+ sudo journalctl -u studylink -n 50
112+ exit 1
113+ fi
92114 EOF
93115
94116 - name : Clean up
0 commit comments