Skip to content

Commit

Permalink
Feat: 배포 스크립트 실패 스크립트 테스트중
Browse files Browse the repository at this point in the history
  • Loading branch information
Kimsoo0119 committed Nov 1, 2024
1 parent 17dcecc commit e5f2ae1
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 8 deletions.
58 changes: 58 additions & 0 deletions scripts/build-failure.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
#!/bin/bash

echo "1. 환경 설정"
source /etc/profile
cd /home/ubuntu/tori-backend

FAILURE_TIME=$(date '+%Y-%m-%d %H:%M:%S')
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
LOG_FILENAME="build_failure_${TIMESTAMP}.log"
LOCAL_LOG_PATH="/var/log/deploy/${LOG_FILENAME}"
S3_LOG_PATH="s3://${S3_BUCKET}/deploy-logs/${LOG_FILENAME}"

echo "2. 로컬 로그 저장"
mkdir -p /var/log/deploy
docker logs $(docker ps -q -l) > ${LOCAL_LOG_PATH} 2>&1

echo "3. S3에 로그 업로드"
if aws s3 cp ${LOCAL_LOG_PATH} ${S3_LOG_PATH}; then
echo "로그 업로드 성공: ${S3_LOG_PATH}"
# 30분 동안 유효한 임시 URL 생성
LOG_URL=$(aws s3 presign ${S3_LOG_PATH} --expires-in 1800)
else
echo "로그 업로드 실패"
LOG_URL="로그 업로드 실패"
fi

echo "4. Discord 알림 전송"
MESSAGE=$(cat <<EOF
\`\`\`
______ _ _ ______ _ _ _
| ____(_) | | ____| (_) | | |
| |__ _| | _ _ _ __ ___ | |__ __ _ _| | ___ __| |
| __| | | |/ | | | '__/ _ \ | __/ _\` | | |/ _ \/ _\` |
| | | | | (_| | | | __/ | | | (_| | | | __/ (_| |
|_| |_|_|\__,_|_| \___| |_| \__,_|_|_|\___|\__,_|
🚨 빌드 실패 🚨
실패 시간: ${FAILURE_TIME}
원인: 도커 이미지 빌드 과정에서 오류가 발생했습니다.
상세 로그: ${LOG_URL}
(로그 URL은 30분간 유효합니다)
\`\`\`
EOF
)

JSON_PAYLOAD=$(jq -n \
--arg msg "$MESSAGE" \
'{content: $msg}')

curl -H "Content-Type: application/json" \
-X POST \
-d "$JSON_PAYLOAD" \
${DISCORD_DEPLOY_WEBHOOK}

echo "5. 로컬 로그 정리"
find /var/log/deploy -name "build_failure_*.log" -type f -mtime +3 -delete
34 changes: 26 additions & 8 deletions scripts/execute.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,40 +11,58 @@ aws s3 cp ${S3_URL} /home/ubuntu/tori-backend/.env

# 히스토리 파일 경로
LOCKFILE_HASH_FILE="/tmp/package_lock_hash"
PRISMA_HASH_FILE="/tmp/prisma_schema_hash"
PREVIOUS_IMAGES_FILE="/tmp/previous_image_ids"
PREVIOUS_CONTAINERS_FILE="/tmp/previous_container_ids"

echo "3. package-lock.json 해시값 계산"
echo "3. package-lock.json과 schema.prisma 해시값 계산"
CURRENT_LOCK_HASH=$(md5sum package-lock.json | awk '{ print $1 }')
echo "현재 해시값: $CURRENT_LOCK_HASH"
CURRENT_PRISMA_HASH=$(md5sum prisma/schema.prisma | awk '{ print $1 }')
echo "현재 package-lock.json 해시값: $CURRENT_LOCK_HASH"
echo "현재 schema.prisma 해시값: $CURRENT_PRISMA_HASH"

# 이전 해시값과 비교
# package-lock.json 변경 확인
if [ ! -f "$LOCKFILE_HASH_FILE" ] || [ "$(cat $LOCKFILE_HASH_FILE)" != "$CURRENT_LOCK_HASH" ]; then
echo "4. 의존성 변경 감지, npm ci 실행"
npm ci
echo "새로운 해시값 저장: $CURRENT_LOCK_HASH"
echo "새로운 package-lock.json 해시값 저장: $CURRENT_LOCK_HASH"
echo $CURRENT_LOCK_HASH > $LOCKFILE_HASH_FILE
else
echo "4. 의존성 변경 없음, npm ci 스킵"
fi

echo "5. 새로운 도커 이미지 빌드 시작"
# # schema.prisma 변경 확인
# if [ ! -f "$PRISMA_HASH_FILE" ] || [ "$(cat $PRISMA_HASH_FILE)" != "$CURRENT_PRISMA_HASH" ]; then
# echo "5. schema.prisma 변경 감지, prisma generate 실행"
# npx prisma generate
# echo "새로운 schema.prisma 해시값 저장: $CURRENT_PRISMA_HASH"
# echo $CURRENT_PRISMA_HASH > $PRISMA_HASH_FILE
# else
# echo "5. schema.prisma 변경 없음, prisma generate 스킵"
# fi

echo "6. 새로운 도커 이미지 빌드"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
IMAGE_TAG="${DOCKER_IMAGE_NAME}:${TIMESTAMP}"

# 새 태그로 빌드
docker build -t ${IMAGE_TAG} .


if [ $? -ne 0 ]; then
echo "도커 빌드 실패"
if [ -f "./scripts/build-failure.sh" ]; then
echo "빌드 실패 처리 스크립트 실행"
bash ./scripts/build-failure.sh
fi
exit 1
fi

# latest 태그도 업데이트
docker tag ${IMAGE_TAG} ${DOCKER_IMAGE_NAME}:latest
echo "도커 빌드 성공"

echo "6. 컨테이너 관리"
echo "7. 컨테이너 관리"
# 현재 실행 중인 컨테이너 ID 저장
CURRENT_CONTAINER_ID=$(docker ps -q --filter "name=${DOCKER_CONTAINER_NAME}")

Expand Down Expand Up @@ -75,7 +93,7 @@ if [ ! -z "$CURRENT_CONTAINER_ID" ]; then
fi
fi

echo "7. 새 컨테이너 실행"
echo "8. 새 컨테이너 실행"
CONTAINER_NAME="${DOCKER_CONTAINER_NAME}_$(date +%s)"
NEW_CONTAINER_ID=$(docker run -d -p ${PORT}:${PORT} --name $CONTAINER_NAME ${IMAGE_TAG})
echo "새로 실행된 컨테이너 ID: $NEW_CONTAINER_ID"
Expand All @@ -99,7 +117,7 @@ if [ $timeout -le 0 ]; then
exit 1
fi

echo "8. 이미지 관리"
echo "9. 이미지 관리"
NEW_IMAGE_ID=$(docker images -q ${IMAGE_TAG})
echo "새 이미지 ID: $NEW_IMAGE_ID"

Expand Down

0 comments on commit e5f2ae1

Please sign in to comment.