deploy.sh

#!/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 ""
posted @ 2026-05-27 16:29  尐海爸爸  阅读(9)  评论(0)    收藏  举报