#!/bin/bash
clear
echo "============================================="
echo " Mac JavaWeb 自动化部署脚本 (Docker)"
echo "============================================="
# ===================== 参数处理 =====================
if [ $# -ge 2 ]; then
PROJECT_PATH="$1"
ACTIVE_ENV="$2"
echo "✅ 使用命令行参数"
else
read -p "请输入项目绝对路径(例:/Users/xxx/project): " PROJECT_PATH
read -p "请输入打包环境(例:dev/test/prod/hy): " ACTIVE_ENV
fi
# 进入项目目录
cd "$PROJECT_PATH" || {
echo "❌ 项目路径不存在!"
exit 1
}
echo "✅ 已进入项目目录: $PROJECT_PATH"
# ===================== 自动获取项目名 =====================
projectName=$(mvn help:evaluate -Dexpression=project.artifactId -q -DforceStdout)
echo "✅ 自动获取项目名: $projectName"
# ===================== 自动生成 Dockerfile =====================
echo "📦 生成 Dockerfile..."
cat > Dockerfile << EOF
FROM harbor.reda-flight.com/public/openjdk:17.0.1-slim
ENV TZ=Asia/Shanghai
ENV ACTIVE=$ACTIVE_ENV
RUN mkdir /app
WORKDIR /app
ADD /target/${projectName}.jar ${projectName}.jar
ENTRYPOINT ["java", "-Dspring.profiles.active=\${ACTIVE}","-jar","/app/${projectName}.jar"]
EOF
echo "✅ Dockerfile 生成成功!"
# ===================== Maven 打包 =====================
echo "🔨 Maven 打包中..."
mvn clean package -DskipTests
if [ $? -ne 0 ]; then
echo "❌ Maven 打包失败!"
exit 1
fi
echo "✅ Maven 打包成功!"
# ===================== Docker 构建 =====================
IMAGE_NAME="harbor.reda-flight.com/lhy/${projectName}:v1.0"
echo "🐳 构建镜像: $IMAGE_NAME"
docker build -f ./Dockerfile --platform linux/amd64 -t "$IMAGE_NAME" .
if [ $? -ne 0 ]; then
echo "❌ Docker 构建失败!"
exit 1
fi
# ===================== 推送镜像 =====================
echo "☁️ 推送镜像到仓库..."
docker push "$IMAGE_NAME"
if [ $? -ne 0 ]; then
echo "❌ 镜像推送失败!"
exit 1
fi
echo ""
echo "============================================="
echo " ✅ 部署全部完成!"
echo "============================================="
# ===================== 输出启动命令 =====================
echo ""
echo "🚀 【一键启动命令】直接复制运行:"
echo "docker rm -f $projectName && docker run --name $projectName -e ACTIVE=$ACTIVE_ENV --net=host -d $IMAGE_NAME"
echo ""