Files
asset_assistant/backend/user/build.sh
2025-11-11 15:05:50 +08:00

83 lines
2.7 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="user-api"
IMAGE_TAG="1.0.0"
FULL_IMAGE="${IMAGE_NAME}:${IMAGE_TAG}"
COMPOSE_PROJECT_NAME="user_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构建新镜像
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启动新服务
log_info "开始启动编排服务: ${COMPOSE_PROJECT_NAME}"
if docker-compose -f "$DOCKER_COMPOSE_FILE" -p "$COMPOSE_PROJECT_NAME" up -d; then
log_info "编排服务 ${COMPOSE_PROJECT_NAME} 已成功启动"
else
log_error "编排服务 ${COMPOSE_PROJECT_NAME} 启动失败"
exit 1
fi
log_info "===== 构建脚本执行完成 ====="