Skip to content

Commit 9dfd06a

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

1 file changed

Lines changed: 30 additions & 43 deletions

File tree

.github/workflows/deploy.yml

Lines changed: 30 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ jobs:
2626

2727
- name: Build with Gradle
2828
run: |
29-
# Maven Central 403 에러 대비 재시도 로직 유지
3029
for i in {1..3}; do
3130
./gradlew clean build -x test && break || {
3231
echo "Build attempt $i failed, retrying in 10 seconds..."
@@ -41,82 +40,70 @@ jobs:
4140
4241
- name: Deploy to EC2
4342
run: |
44-
# 1. 빌드된 JAR 파일 찾기 (BE-로 시작하고 plain이 아닌 파일)
43+
# 1. 빌드된 JAR 파일 찾기
4544
JAR_FILE_PATH=$(find build/libs/ -name "BE-*.jar" ! -name "*plain*" | head -n 1)
46-
4745
if [ -z "$JAR_FILE_PATH" ]; then
48-
echo "Error: No JAR file found in build/libs/"
46+
echo "Error: No JAR file found"
4947
exit 1
5048
fi
5149
52-
echo "Target JAR to transfer: $JAR_FILE_PATH"
50+
# 로컬(GitHub Runner)에서 파일 크기 확인
51+
LOCAL_SIZE=$(stat -c%s "$JAR_FILE_PATH")
52+
echo "Local JAR size: $LOCAL_SIZE bytes"
5353
54-
# 2. EC2에서 기존 파일 및 잘못된 디렉토리 정리
55-
# 특히 app-new.jar가 디렉토리인 경우를 대비해 rm -rf를 사용합니다.
56-
ssh -i private_key.pem -o StrictHostKeyChecking=no -o ConnectTimeout=10 \
54+
# 2. EC2 사전 준비 (unzip 설치 및 기존 파일 정리)
55+
ssh -i private_key.pem -o StrictHostKeyChecking=no \
5756
${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} << 'EOF'
58-
# 기존에 잘못 생성된 디렉토리나 파일 삭제
59-
sudo rm -rf /home/ubuntu/app-new.jar
57+
# unzip이 없으면 설치
58+
if ! command -v unzip &> /dev/null; then
59+
sudo apt-get update && sudo apt-get install -y unzip
60+
fi
6061
61-
# 기존 실행 중인 파일 백업 (파일이 존재할 때만)
62+
sudo rm -rf /home/ubuntu/app-new.jar
6263
if [ -f /home/ubuntu/app.jar ]; then
6364
sudo cp /home/ubuntu/app.jar /home/ubuntu/app.jar.backup
6465
fi
6566
EOF
6667
6768
# 3. JAR 파일 전송
6869
echo "Transferring JAR to EC2..."
69-
scp -i private_key.pem -o StrictHostKeyChecking=no -o ConnectTimeout=10 \
70-
$JAR_FILE_PATH ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }}:/home/ubuntu/app-new.jar
70+
scp -i private_key.pem -o StrictHostKeyChecking=no \
71+
"$JAR_FILE_PATH" ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }}:/home/ubuntu/app-new.jar
7172
7273
# 4. 파일 검증 및 서비스 재시작
73-
ssh -i private_key.pem -o StrictHostKeyChecking=no -o ConnectTimeout=10 \
74-
${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} << 'EOF'
75-
set -e # 에러 발생 시 스크립트 중단
74+
ssh -i private_key.pem -o StrictHostKeyChecking=no \
75+
${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} << EOF
76+
set -e
7677
77-
# 전송된 파일이 존재하는지 확인 (파일 형태인지 -f 체크)
78-
if [ ! -f /home/ubuntu/app-new.jar ]; then
79-
echo "Error: app-new.jar not found or is not a file"
80-
exit 1
81-
fi
78+
# 전송된 파일 크기 확인
79+
REMOTE_SIZE=\$(stat -c%s /home/ubuntu/app-new.jar)
80+
echo "Remote JAR size: \$REMOTE_SIZE bytes"
8281
83-
# 파일 크기 확인 (최소 1MB 이상)
84-
size=$(stat -c%s /home/ubuntu/app-new.jar)
85-
if [ $size -lt 1000000 ]; then
86-
echo "Error: JAR file too small ($size bytes). Transfer might have failed."
82+
# 로컬과 원격 크기 비교 (다르면 전송 오류)
83+
if [ "$LOCAL_SIZE" -ne "\$REMOTE_SIZE" ]; then
84+
echo "Error: File size mismatch! Local: $LOCAL_SIZE, Remote: \$REMOTE_SIZE"
8785
exit 1
8886
fi
8987
90-
# JAR 파일 유효성 검증
88+
# JAR 파일 유효성 검증 (unzip 사용)
89+
echo "Testing JAR validity..."
9190
if ! unzip -t /home/ubuntu/app-new.jar > /dev/null 2>&1; then
92-
echo "Error: Invalid or corrupted JAR file"
91+
echo "Error: Invalid or corrupted JAR file (Unzip test failed)"
9392
exit 1
9493
fi
9594
96-
echo "JAR file validated successfully (size: $size bytes)"
95+
echo "JAR file validated successfully."
9796
98-
# 서비스 중지 후 파일 교체 및 재시작
99-
echo "Restarting studylink service..."
97+
# 서비스 재시작
10098
sudo systemctl stop studylink
10199
sudo mv /home/ubuntu/app-new.jar /home/ubuntu/app.jar
102100
sudo chown ubuntu:ubuntu /home/ubuntu/app.jar
103101
sudo systemctl start studylink
104102
105-
# 서비스 상태 확인
106103
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
104+
sudo systemctl is-active studylink
114105
EOF
115106
116107
- name: Clean up
117108
if: always()
118-
run: rm -f private_key.pem
119-
120-
- name: Send deployment notification
121-
if: success()
122-
run: echo "Deployment successful!"
109+
run: rm -f private_key.pem

0 commit comments

Comments
 (0)