Skip to content

Commit ce52d63

Browse files
authored
Merge pull request #199 from Runnect/fix/prod-deploy-healthcheck
fix: 배포 헬스체크를 로그 기반 완료 신호 감지 방식으로 변경 (prod)
2 parents 6fc0409 + 09d7750 commit ce52d63

1 file changed

Lines changed: 50 additions & 13 deletions

File tree

‎scripts/deploy.sh‎

Lines changed: 50 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
set -e
33

44
APP_DIR=/home/ec2-user/app
5+
cd "$APP_DIR"
56
JAR_PATH=$(ls $APP_DIR/*.jar | grep -v plain | head -1)
67
echo "> JAR 파일: $JAR_PATH"
78

@@ -16,28 +17,64 @@ else
1617
fi
1718

1819
echo "> 애플리케이션 시작"
19-
nohup java -jar \
20+
OTEL_AGENT_JAR=$APP_DIR/grafana-opentelemetry-java.jar
21+
OTEL_ENV_FILE=$APP_DIR/otel.env
22+
JAVA_AGENT_OPTS=""
23+
if [ -f "$OTEL_AGENT_JAR" ] && [ -f "$OTEL_ENV_FILE" ]; then
24+
echo "> Grafana OTel agent 감지, 모니터링 활성화"
25+
set -a
26+
source "$OTEL_ENV_FILE"
27+
set +a
28+
JAVA_AGENT_OPTS="-javaagent:$OTEL_AGENT_JAR"
29+
else
30+
echo "> Grafana OTel agent 미설정, 모니터링 없이 실행"
31+
fi
32+
33+
LOG_FILE=/home/ec2-user/app/nohup.out
34+
START_LINE=$(wc -l < "$LOG_FILE" 2>/dev/null || echo 0)
35+
36+
nohup java $JAVA_AGENT_OPTS -jar \
2037
-Duser.timezone=Asia/Seoul \
2138
$JAR_PATH \
22-
>> /home/ec2-user/app/nohup.out 2>&1 &
39+
>> "$LOG_FILE" 2>&1 &
40+
APP_PID=$!
41+
echo "> 프로세스 시작됨 (PID: $APP_PID)"
2342

24-
echo "> 15초 후 헬스체크 시작"
25-
sleep 15
43+
echo "> 앱 준비 신호 대기 중 (최대 240초, 프로세스 생존 여부로 실패 판단)"
44+
MAX_WAIT=240
45+
ELAPSED=0
46+
READY=false
2647

27-
for i in {1..10}; do
28-
RESPONSE=$(curl -s http://localhost:8080/actuator/health || true)
29-
if echo "$RESPONSE" | grep -q '"status":"UP"'; then
30-
echo "> 헬스체크 성공"
31-
break
32-
fi
33-
echo "> 헬스체크 실패($i/10): $RESPONSE"
34-
if [ $i -eq 10 ]; then
48+
while [ $ELAPSED -lt $MAX_WAIT ]; do
49+
if ! kill -0 $APP_PID 2>/dev/null; then
50+
echo "> 프로세스가 예기치 않게 종료됨 (크래시)"
51+
echo "> 최근 로그:"
52+
tail -n 40 "$LOG_FILE"
3553
echo "> 배포 실패"
3654
exit 1
3755
fi
38-
sleep 10
56+
57+
if tail -n +"$((START_LINE + 1))" "$LOG_FILE" | grep -q "Started ServerApplication"; then
58+
echo "> 앱 준비 완료 신호 감지 (${ELAPSED}초 소요)"
59+
READY=true
60+
break
61+
fi
62+
63+
sleep 2
64+
ELAPSED=$((ELAPSED + 2))
3965
done
4066

67+
if [ "$READY" != "true" ]; then
68+
echo "> ${MAX_WAIT}초 내에 준비 신호 없음 — 안전장치 발동"
69+
echo "> 최근 로그:"
70+
tail -n 40 "$LOG_FILE"
71+
echo "> 배포 실패"
72+
exit 1
73+
fi
74+
75+
RESPONSE=$(curl -s --max-time 10 http://localhost:8080/actuator/health || true)
76+
echo "> 헬스체크 확인: $RESPONSE"
77+
4178
echo "> Nginx 시작"
4279
sudo systemctl start nginx || true
4380
sudo systemctl enable nginx || true

0 commit comments

Comments
 (0)