anxin-ruoyi/docker/backend/build.sh
2026-01-05 01:46:20 +08:00

162 lines
3.6 KiB
Bash
Raw Permalink 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
# 后端Docker镜像构建脚本
# 用于构建若依后端应用的Docker镜像
set -e # 遇到错误立即退出
# 脚本配置
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
IMAGE_NAME="anxin-backend"
IMAGE_TAG="latest"
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 日志函数
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 显示帮助信息
show_help() {
cat << EOF
后端Docker镜像构建脚本
用法: $0 [选项]
选项:
-t, --tag TAG 设置镜像标签 (默认: latest)
-n, --name NAME 设置镜像名称 (默认: anxin-backend)
--no-cache 不使用缓存构建
--clean 构建前清理Maven缓存
-h, --help 显示此帮助信息
示例:
$0 # 使用默认设置构建
$0 -t v1.0.0 # 构建并标记为v1.0.0
$0 --no-cache # 不使用缓存构建
$0 --clean -t dev # 清理后构建dev版本
EOF
}
# 解析命令行参数
parse_args() {
while [[ $# -gt 0 ]]; do
case $1 in
-t|--tag)
IMAGE_TAG="$2"
shift 2
;;
-n|--name)
IMAGE_NAME="$2"
shift 2
;;
--no-cache)
NO_CACHE="--no-cache"
shift
;;
--clean)
CLEAN_BUILD=true
shift
;;
-h|--help)
show_help
exit 0
;;
*)
log_error "未知参数: $1"
show_help
exit 1
;;
esac
done
}
# 检查Docker是否可用
check_docker() {
if ! command -v docker &> /dev/null; then
log_error "Docker未安装或不在PATH中"
exit 1
fi
if ! docker info &> /dev/null; then
log_error "Docker守护进程未运行"
exit 1
fi
}
# 清理Maven缓存
clean_maven() {
if [[ "$CLEAN_BUILD" == "true" ]]; then
log_info "清理Maven缓存..."
cd "$PROJECT_ROOT"
if command -v mvn &> /dev/null; then
mvn clean
else
log_warning "Maven未安装跳过清理步骤"
fi
fi
}
# 构建Docker镜像
build_image() {
log_info "开始构建Docker镜像..."
log_info "项目根目录: $PROJECT_ROOT"
log_info "镜像名称: $IMAGE_NAME:$IMAGE_TAG"
cd "$PROJECT_ROOT"
# 构建命令
BUILD_CMD="docker build -f docker/backend/Dockerfile -t $IMAGE_NAME:$IMAGE_TAG $NO_CACHE ."
log_info "执行构建命令: $BUILD_CMD"
if eval "$BUILD_CMD"; then
log_success "Docker镜像构建成功: $IMAGE_NAME:$IMAGE_TAG"
else
log_error "Docker镜像构建失败"
exit 1
fi
}
# 显示镜像信息
show_image_info() {
log_info "镜像信息:"
docker images "$IMAGE_NAME:$IMAGE_TAG" --format "table {{.Repository}}\t{{.Tag}}\t{{.ID}}\t{{.CreatedAt}}\t{{.Size}}"
}
# 主函数
main() {
log_info "开始构建若依后端Docker镜像..."
parse_args "$@"
check_docker
clean_maven
build_image
show_image_info
log_success "构建完成!"
log_info "运行镜像: docker run -d -p 8080:8080 --name anxin-backend-container $IMAGE_NAME:$IMAGE_TAG"
}
# 执行主函数
main "$@"