Skip to content

Commit d52eb77

Browse files
authored
[CI/CD] 헬스 체크 루프 재시도 방식 적용
1 parent 44c5e30 commit d52eb77

File tree

1 file changed

+44
-40
lines changed

1 file changed

+44
-40
lines changed

.github/workflows/ci-cd.yml

Lines changed: 44 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -87,48 +87,52 @@ jobs:
8787
$DOCKER_IMAGE
8888
8989
echo "▶ Waiting for health check..."
90-
sleep 50
9190
HEALTH_URL="http://localhost:$PORT/actuator/health"
91+
92+
for i in {1..18}; do # 10초씩, 최대 180초
9293
CODE=$(curl -s -o /dev/null -w "%{http_code}" $HEALTH_URL)
93-
9494
if [ "$CODE" -eq 200 ]; then
95-
echo "Health check passed for $VERSION"
96-
else
97-
echo "Health check failed (code: $CODE). Rolling back..."
98-
99-
# 이전 태그 찾기 (현재 태그 제외, 최신 2번째)
100-
PREV_VERSION=$(docker images --format "{{.Tag}}" ${{ secrets.DOCKERHUB_USERNAME }}/mokakbob \
101-
| grep -v latest \
102-
| grep -v "$VERSION" \
103-
| sort -V \
104-
| tail -n 1)
105-
106-
if [ -z "$PREV_VERSION" ]; then
107-
echo "⚠ No previous version found. Rollback not possible."
108-
exit 1
109-
fi
110-
111-
echo "▶ Rolling back to version: $PREV_VERSION"
112-
PREV_IMAGE="${{ secrets.DOCKERHUB_USERNAME }}/mokakbob:$PREV_VERSION"
113-
114-
docker stop $APP_NAME || true
115-
docker rm $APP_NAME || true
116-
docker run -d --name $APP_NAME -p $PORT:8080 \
117-
-e "SPRING_DATASOURCE_URL=${{ secrets.SPRING_DATASOURCE_URL }}" \
118-
-e "SPRING_DATASOURCE_USERNAME=${{ secrets.SPRING_DATASOURCE_USERNAME }}" \
119-
-e "SPRING_DATASOURCE_PASSWORD=${{ secrets.SPRING_DATASOURCE_PASSWORD }}" \
120-
-e "REDIS_HOST=${{ secrets.REDIS_HOST }}" \
121-
-e "REDIS_PORT=${{ secrets.REDIS_PORT }}" \
122-
-e "MAIL_USERNAME=${{ secrets.MAIL_USERNAME }}" \
123-
-e "MAIL_PASSWORD=${{ secrets.MAIL_PASSWORD }}" \
124-
-e "OAUTH_GITHUB_CLIENT_ID=${{ secrets.OAUTH_GITHUB_CLIENT_ID }}" \
125-
-e "OAUTH_GITHUB_CLIENT_SECRET=${{ secrets.OAUTH_GITHUB_CLIENT_SECRET }}" \
126-
-e "KAFKA_BOOTSTRAP_SERVERS=${{ secrets.KAFKA_BOOTSTRAP_SERVERS }}" \
127-
-e "JWT_SECRET=${{ secrets.JWT_SECRET }}" \
128-
$PREV_IMAGE
129-
130-
echo "Rolled back to $PREV_VERSION"
95+
echo "Health check passed at attempt $i"
96+
break
97+
fi
98+
echo "Attempt $i failed, retrying in 10s..."
99+
sleep 10
100+
done
101+
102+
if [ "$CODE" -ne 200 ]; then
103+
echo "⚠ Health check failed after 180s, rolling back..."
104+
105+
# 이전 태그 찾기 (현재 태그 제외, 최신 2번째)
106+
PREV_VERSION=$(docker images --format "{{.Tag}}" ${{ secrets.DOCKERHUB_USERNAME }}/mokakbob \
107+
| grep -v latest \
108+
| grep -v "$VERSION" \
109+
| sort -V \
110+
| tail -n 1)
111+
112+
if [ -z "$PREV_VERSION" ]; then
113+
echo "⚠ No previous version found. Rollback not possible."
131114
exit 1
132115
fi
133-
134-
docker image prune -f
116+
117+
echo "▶ Rolling back to version: $PREV_VERSION"
118+
PREV_IMAGE="${{ secrets.DOCKERHUB_USERNAME }}/mokakbob:$PREV_VERSION"
119+
120+
docker stop $APP_NAME || true
121+
docker rm $APP_NAME || true
122+
docker run -d --name $APP_NAME -p $PORT:8080 \
123+
-e "SPRING_DATASOURCE_URL=${{ secrets.SPRING_DATASOURCE_URL }}" \
124+
-e "SPRING_DATASOURCE_USERNAME=${{ secrets.SPRING_DATASOURCE_USERNAME }}" \
125+
-e "SPRING_DATASOURCE_PASSWORD=${{ secrets.SPRING_DATASOURCE_PASSWORD }}" \
126+
-e "REDIS_HOST=${{ secrets.REDIS_HOST }}" \
127+
-e "REDIS_PORT=${{ secrets.REDIS_PORT }}" \
128+
-e "MAIL_USERNAME=${{ secrets.MAIL_USERNAME }}" \
129+
-e "MAIL_PASSWORD=${{ secrets.MAIL_PASSWORD }}" \
130+
-e "OAUTH_GITHUB_CLIENT_ID=${{ secrets.OAUTH_GITHUB_CLIENT_ID }}" \
131+
-e "OAUTH_GITHUB_CLIENT_SECRET=${{ secrets.OAUTH_GITHUB_CLIENT_SECRET }}" \
132+
-e "KAFKA_BOOTSTRAP_SERVERS=${{ secrets.KAFKA_BOOTSTRAP_SERVERS }}" \
133+
-e "JWT_SECRET=${{ secrets.JWT_SECRET }}" \
134+
$PREV_IMAGE
135+
136+
echo "Rolled back to $PREV_VERSION"
137+
exit 1
138+
fi

0 commit comments

Comments
 (0)