Skip to content

Commit c5a52d0

Browse files
committed
[FEAT] CI/CD 파일 수정
1 parent 817165c commit c5a52d0

1 file changed

Lines changed: 41 additions & 19 deletions

File tree

.github/workflows/deploy.yml

Lines changed: 41 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ jobs:
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

Comments
 (0)