add
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -euo pipefail # 更严格的错误检查:未定义变量报错、管道错误传递
|
||||||
|
|
||||||
# 定义日志函数(带时间戳和级别)
|
# 定义日志函数(带时间戳和级别)
|
||||||
log_info() {
|
log_info() {
|
||||||
@@ -14,44 +14,69 @@ log_error() {
|
|||||||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] [ERROR] $1" >&2
|
echo "[$(date +'%Y-%m-%d %H:%M:%S')] [ERROR] $1" >&2
|
||||||
}
|
}
|
||||||
|
|
||||||
# 定义镜像信息
|
# 定义配置常量(集中管理,便于修改)
|
||||||
IMAGE_NAME="user-api"
|
IMAGE_NAME="user-api"
|
||||||
IMAGE_TAG="1.0.0"
|
IMAGE_TAG="1.0.0"
|
||||||
FULL_IMAGE="${IMAGE_NAME}:${IMAGE_TAG}"
|
FULL_IMAGE="${IMAGE_NAME}:${IMAGE_TAG}"
|
||||||
COMPOSE_PROJECT_NAME="user_service"
|
COMPOSE_PROJECT_NAME="user_service"
|
||||||
DOCKER_COMPOSE_FILE="./docker-compose.yaml"
|
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 "===== 开始执行构建脚本 ====="
|
log_info "===== 开始执行构建脚本 ====="
|
||||||
|
|
||||||
# 步骤1:删除现有镜像
|
# 前置检查:确保必要文件和目录存在
|
||||||
|
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}"
|
log_info "尝试删除现有镜像: ${FULL_IMAGE}"
|
||||||
if sudo docker rmi -f "${FULL_IMAGE}" >/dev/null 2>&1; then
|
if sudo docker rmi -f "${FULL_IMAGE}" >/dev/null 2>&1; then
|
||||||
log_info "镜像 ${FULL_IMAGE} 删除成功"
|
log_info "镜像 ${FULL_IMAGE} 删除成功"
|
||||||
else
|
else
|
||||||
log_warn "镜像 ${FULL_IMAGE} 不存在,跳过删除步骤"
|
log_warn "镜像 ${FULL_IMAGE} 不存在或无法删除,跳过删除步骤"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 步骤2:构建新镜像
|
# 步骤3:构建新镜像
|
||||||
log_info "开始构建新镜像: ${FULL_IMAGE}(Dockerfile位于src目录)"
|
log_info "开始构建新镜像: ${FULL_IMAGE}(Dockerfile位于${DOCKERFILE_PATH})"
|
||||||
if sudo docker build -t "${FULL_IMAGE}" -f ./src/Dockerfile .; then
|
if cd "$SRC_DIR" && sudo docker build -t "${FULL_IMAGE}" -f Dockerfile .; then
|
||||||
log_info "镜像 ${FULL_IMAGE} 构建成功"
|
log_info "镜像 ${FULL_IMAGE} 构建成功"
|
||||||
else
|
else
|
||||||
log_error "镜像 ${FULL_IMAGE} 构建失败"
|
log_error "镜像 ${FULL_IMAGE} 构建失败"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 步骤3:停止docker-compose服务
|
# 步骤4:启动新服务
|
||||||
log_info "开始停止编排服务: ${COMPOSE_PROJECT_NAME}"
|
log_info "开始启动编排服务: ${COMPOSE_PROJECT_NAME}"
|
||||||
if [ ! -f "$DOCKER_COMPOSE_FILE" ]; then
|
if docker-compose -f "$DOCKER_COMPOSE_FILE" -p "$COMPOSE_PROJECT_NAME" up -d; then
|
||||||
log_error "未找到docker-compose文件: ${DOCKER_COMPOSE_FILE}"
|
log_info "编排服务 ${COMPOSE_PROJECT_NAME} 已成功启动"
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
log_info "执行 docker-compose down 命令"
|
|
||||||
if docker-compose -f "$DOCKER_COMPOSE_FILE" -p "$COMPOSE_PROJECT_NAME" down; then
|
|
||||||
log_info "编排服务 ${COMPOSE_PROJECT_NAME} 已成功停止"
|
|
||||||
else
|
else
|
||||||
log_error "编排服务 ${COMPOSE_PROJECT_NAME} 停止失败"
|
log_error "编排服务 ${COMPOSE_PROJECT_NAME} 启动失败"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -1,58 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# 定义日志函数(带时间戳和级别)
|
|
||||||
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"
|
|
||||||
|
|
||||||
log_info "===== 开始执行构建脚本 ====="
|
|
||||||
|
|
||||||
# 步骤1:删除现有镜像
|
|
||||||
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
|
|
||||||
|
|
||||||
# 步骤2:构建新镜像
|
|
||||||
log_info "开始构建新镜像: ${FULL_IMAGE}(Dockerfile位于src目录)"
|
|
||||||
if sudo docker build -t "${FULL_IMAGE}" -f ./src/Dockerfile .; then
|
|
||||||
log_info "镜像 ${FULL_IMAGE} 构建成功"
|
|
||||||
else
|
|
||||||
log_error "镜像 ${FULL_IMAGE} 构建失败"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 步骤3:停止docker-compose服务
|
|
||||||
log_info "开始停止编排服务: ${COMPOSE_PROJECT_NAME}"
|
|
||||||
if [ ! -f "$DOCKER_COMPOSE_FILE" ]; then
|
|
||||||
log_error "未找到docker-compose文件: ${DOCKER_COMPOSE_FILE}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
log_info "执行 docker-compose down 命令"
|
|
||||||
if docker-compose -f "$DOCKER_COMPOSE_FILE" -p "$COMPOSE_PROJECT_NAME" down; then
|
|
||||||
log_info "编排服务 ${COMPOSE_PROJECT_NAME} 已成功停止"
|
|
||||||
else
|
|
||||||
log_error "编排服务 ${COMPOSE_PROJECT_NAME} 停止失败"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
log_info "===== 构建脚本执行完成 ====="
|
|
||||||
Reference in New Issue
Block a user