Files
water-management-system/scripts/deploy.sh
T

42 lines
1.2 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# 生产部署脚本(Issue #90):拉取镜像 -> 滚动更新 -> 健康检查 -> 失败回滚
set -euo pipefail
COMMIT_SHA="${1:-latest}"
REGISTRY="${REGISTRY:-registry.xayunmei.local}"
IMAGE="water-management-system"
APP_DIR="/opt/wms"
HEALTH_URL="http://127.0.0.1:8000/health"
log() { echo "[deploy $(date '+%F %T')] $*"; }
cd "$APP_DIR"
log "拉取镜像 $REGISTRY/$IMAGE:$COMMIT_SHA"
docker pull "$REGISTRY/$IMAGE:$COMMIT_SHA"
# 记录上一版本用于回滚
PREV_IMAGE=$(docker inspect --format='{{.Config.Image}}' wms-app 2>/dev/null || echo "")
echo "$PREV_IMAGE" > .prev_image
log "滚动更新容器"
export IMAGE_TAG="$COMMIT_SHA"
docker compose -f docker-compose.yml -f deploy/production/docker-compose.override.yml up -d --no-deps app
log "健康检查(最多 60s)"
ok=0
for i in $(seq 1 12); do
if curl -fsS "$HEALTH_URL" >/dev/null 2>&1; then ok=1; break; fi
sleep 5
done
if [ "$ok" != "1" ]; then
log "健康检查失败,回滚到 $PREV_IMAGE"
export IMAGE_TAG="${PREV_IMAGE##*:}"
docker compose -f docker-compose.yml -f deploy/production/docker-compose.override.yml up -d --no-deps app
exit 1
fi
log "部署成功:$COMMIT_SHA"
docker image prune -f >/dev/null 2>&1 || true