162 lines
3.6 KiB
Bash
162 lines
3.6 KiB
Bash
#!/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 "$@" |