Files
asset_assistant/backend/deploy.sh
2025-11-17 15:17:36 +08:00

87 lines
3.0 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.
#!/bin/bash
set -euo pipefail # 更严格的错误检查:未定义变量报错、管道错误传递
# 定义日志函数(带时间戳和级别)
log_info() {
echo "[$(date +'%Y-%m-%d %H:%M:%S')] [INFO] $1"
}
log_warn() {
echo "[$(date +'%Y-%m-%d %H:%M:%S')] [WARN] $1" >&2
}
log_error() {
echo "[$(date +'%Y-%m-%d %H:%M:%S')] [ERROR] $1" >&2
}
# 定义配置常量(等号两侧无空格!集中管理,便于修改)
IMAGE_NAME="asset_assistant-api"
IMAGE_TAG="1.0.0"
FULL_IMAGE="${IMAGE_NAME}:${IMAGE_TAG}"
COMPOSE_PROJECT_NAME="asset_assistant_service"
DOCKER_COMPOSE_FILE="./docker-compose.yaml"
SRC_DIR="./src"
DOCKERFILE_PATH="${SRC_DIR}/Dockerfile"
# 检查目录和文件存在性的通用函数
check_exists() {
local path="$1" # 变量引用加引号,避免路径含空格报错
local type="$2" # "file" 或 "dir"
local desc="$3"
if [ "$type" = "file" ] && [ ! -f "$path" ]; then
log_error "缺失必要文件: $desc ($path)"
exit 1
elif [ "$type" = "dir" ] && [ ! -d "$path" ]; then
log_error "缺失必要目录: $desc ($path)"
exit 1
fi
}
log_info "===== 开始执行构建脚本 ====="
# 前置检查:确保必要文件和目录存在
check_exists "$DOCKER_COMPOSE_FILE" "file" "docker-compose配置文件"
check_exists "$SRC_DIR" "dir" "源代码目录"
check_exists "$DOCKERFILE_PATH" "file" "Dockerfile"
# 步骤1停止docker-compose服务变量引用加引号兼容路径含空格
log_info "开始停止编排服务: ${COMPOSE_PROJECT_NAME}"
if docker-compose -f "$DOCKER_COMPOSE_FILE" -p "$COMPOSE_PROJECT_NAME" down; then
log_info "编排服务 ${COMPOSE_PROJECT_NAME} 已成功停止"
else
log_warn "编排服务 ${COMPOSE_PROJECT_NAME} 停止失败或未运行,继续执行后续步骤"
fi
# 步骤2删除现有镜像忽略不存在的情况
log_info "尝试删除现有镜像: ${FULL_IMAGE}"
if sudo docker rmi -f "${FULL_IMAGE}" >/dev/null 2>&1; then
log_info "镜像 ${FULL_IMAGE} 删除成功"
else
log_warn "镜像 ${FULL_IMAGE} 不存在或无法删除,跳过删除步骤"
fi
# 步骤3构建新镜像切换到src目录避免路径问题
log_info "开始构建新镜像: ${FULL_IMAGE}Dockerfile位于${DOCKERFILE_PATH}"
if cd "$SRC_DIR" && sudo docker build -t "${FULL_IMAGE}" -f Dockerfile .; then
log_info "镜像 ${FULL_IMAGE} 构建成功"
else
log_error "镜像 ${FULL_IMAGE} 构建失败"
exit 1
fi
# 步骤4启动docker-compose服务变量引用加引号
log_info "开始启动编排服务: ${COMPOSE_PROJECT_NAME}"
cd ..
if docker-compose -f "$DOCKER_COMPOSE_FILE" -p "$COMPOSE_PROJECT_NAME" up -d; then
log_info "编排服务 ${COMPOSE_PROJECT_NAME} 已成功启动"
# 额外输出运行状态,提升用户体验
log_info "当前运行的容器:"
docker-compose -f "$DOCKER_COMPOSE_FILE" -p "$COMPOSE_PROJECT_NAME" ps
else
log_error "编排服务 ${COMPOSE_PROJECT_NAME} 启动失败"
exit 1
fi
log_info "===== 构建脚本执行完成 ====="