#!/bin/bash # Product Service 部署脚本 # 使用方式: ./deploy.sh [dev|test|prod] set -e PROFILE=${1:-dev} IMAGE_NAME="erp-product-service" IMAGE_TAG="latest" CONTAINER_NAME="erp-product-service" echo "====== Product Service 部署脚本 ======" echo "环境: $PROFILE" echo "镜像: $IMAGE_NAME:$IMAGE_TAG" # 构建镜像 build_image() { echo "[1/4] 构建Docker镜像..." docker build -t ${IMAGE_NAME}:${IMAGE_TAG} . echo "镜像构建完成" } # 推送镜像(可选) push_image() { echo "[2/4] 推送镜像到仓库..." # 根据实际情况修改镜像仓库地址 # docker tag ${IMAGE_NAME}:${IMAGE_TAG} registry.example.com/${IMAGE_NAME}:${IMAGE_TAG} # docker push registry.example.com/${IMAGE_NAME}:${IMAGE_TAG} echo "镜像推送完成" } # 停止并删除旧容器 deploy_container() { echo "[3/4] 部署容器..." # 停止旧容器 if docker ps -a | grep -q ${CONTAINER_NAME}; then echo "停止旧容器..." docker stop ${CONTAINER_NAME} || true docker rm ${CONTAINER_NAME} || true fi # 启动新容器 echo "启动新容器..." docker run -d \ --name ${CONTAINER_NAME} \ -p 8083:8083 \ -e SPRING_PROFILES_ACTIVE=${PROFILE} \ --restart unless-stopped \ ${IMAGE_NAME}:${IMAGE_TAG} echo "容器启动完成" } # 检查健康状态 check_health() { echo "[4/4] 检查服务健康状态..." MAX_RETRIES=30 RETRY_COUNT=0 while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do if curl -f http://localhost:8083/product/actuator/health > /dev/null 2>&1; then echo "服务健康检查通过" return 0 fi RETRY_COUNT=$((RETRY_COUNT + 1)) echo "等待服务启动... ($RETRY_COUNT/$MAX_RETRIES)" sleep 2 done echo "服务健康检查失败" return 1 } # 主流程 main() { case $PROFILE in dev|test|prod) build_image deploy_container check_health echo "====== 部署完成 ======" ;; *) echo "未知环境: $PROFILE" echo "支持的環境: dev, test, prod" exit 1 ;; esac } main