Repository navigation
Expand file tree
/
Copy pathpublish-dev-all.sh
More file actions
149 lines (117 loc) · 4.64 KB
/
Copy pathpublish-dev-all.sh
File metadata and controls
149 lines (117 loc) · 4.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#!/bin/bash
# 前置步骤:
# sql更新脚本已在数据库中执行
# docker中mysql相关的演示站数据重置sql脚本已更新
# ./docker/qModel/server/upload-init文件夹已更新
# 遇到错误立即停止执行
set -e
# ==========================================
# 1. 配置与变量定义
# ==========================================
OLD_VERSION="1.4.1"
NEW_VERSION="1.4.2"
# 用于校验版本号的基准 pom.xml 文件(通常是根目录的)
VERSION_CHECK_FILE="pom.xml"
# 镜像仓库配置
REGISTRY_URL="crpi-kf13onfj0v8f6jax.cn-shanghai.personal.cr.aliyuncs.com"
REPO_PATH="qiantongkeji/qmodel-server-ce"
FULL_IMAGE_NAME="${REGISTRY_URL}/${REPO_PATH}"
# 远程服务器配置
REMOTE_HOST="192.168.0.100"
REMOTE_USER="qtt"
REMOTE_DIR="~/opt/qModel"
# 排除目录列表
EXCLUDE_DIRS=(".git" "docker")
echo "🚀 准备将项目版本号从 $OLD_VERSION 升级至: $NEW_VERSION"
# ==========================================
# 2. 通用函数定义
# ==========================================
# 防呆校验:检查当前版本号是否与 OLD_VERSION 一致
check_current_version() {
if [ ! -f "$VERSION_CHECK_FILE" ]; then
echo "❌ 错误: 未找到版本校验文件 $VERSION_CHECK_FILE,请确认当前目录是否正确。"
exit 1
fi
# 从 pom.xml 中提取第一个 <version> 标签的值(兼容 macOS BSD grep/sed)
local current_version
current_version=$(sed -n 's/.*<version>\([^<]*\)<\/version>.*/\1/p' "$VERSION_CHECK_FILE" | head -n 1)
if [ "$current_version" != "$OLD_VERSION" ]; then
echo "❌ 防呆校验失败!"
echo " 期望当前版本号为: $OLD_VERSION"
echo " 实际检测到的版本号为: $current_version"
echo " 脚本已终止,请检查版本号配置后重试。"
exit 1
fi
echo "✅ 防呆校验通过,当前版本号确认为: $current_version"
}
# 通用版本替换函数
replace_version() {
local file=$1
local pattern=$2
local replacement=$3
if [ -f "$file" ]; then
echo " -> 正在更新: $file"
sed -i.bak -E "s|${pattern}|${replacement}|g" "$file"
rm -f "${file}.bak"
fi
}
# ==========================================
# 3. 防呆校验
# ==========================================
check_current_version
# ==========================================
# 4. 升级项目版本号
# ==========================================
echo "📦 正在扫描并升级所有 pom.xml 文件..."
EXCLUDE_ARGS=""
for dir in "${EXCLUDE_DIRS[@]}"; do
EXCLUDE_ARGS="$EXCLUDE_ARGS -not -path '*/$dir/*'"
done
eval "find . -name 'pom.xml' $EXCLUDE_ARGS" | while read -r pom_file; do
replace_version "$pom_file" "<version>$OLD_VERSION</version>" "<version>$NEW_VERSION</version>"
done
# 升级 Docker 环境变量
ENV_FILE="./docker/.env"
replace_version "$ENV_FILE" "^QMODEL_VERSION=$OLD_VERSION" "QMODEL_VERSION=$NEW_VERSION"
echo "✅ 版本号升级完成!"
# ==========================================
# 5. Docker 环境准备与构建
# ==========================================
echo "🔑 正在检查阿里云镜像仓库登录状态..."
if ! docker login --username=zhuzhuxia12138 --password-stdin $REGISTRY_URL < /dev/null 2>/dev/null; then
echo "⚠️ 需要手动输入密码进行登录..."
docker login --username=zhuzhuxia12138 $REGISTRY_URL
fi
echo "🏗️ 正在配置 Docker Buildx Builder..."
docker buildx rm qmodel-builder 2>/dev/null || true
docker buildx create --name qmodel-builder --driver docker-container --use >/dev/null
echo "🚀 开始 Maven 构建、打包并推送 Docker 镜像..."
mvn -B clean deploy \
-Dmaven.test.skip=true \
-Dmaven.javadoc.skip=true \
-Dmaven.deploy.skip=true \
-Ddocker.build.skip=false \
-Ddocker.push.skip=false
# ==========================================
# 6. 前端打包与资源拷贝
# ==========================================
echo "🎨 开始打包前端..."
cd qmodel-ui
sh build-prod.sh || { echo "❌ 前端打包失败"; exit 1; }
cd ..
echo "📂 正在更新 Docker 目录下的前端资源..."
cp -r ./qmodel-ui/dist ./docker/qModel/nginx/
# ==========================================
# 7. 远程部署
# ==========================================
echo "🚀 正在部署到远程服务器 $REMOTE_HOST..."
ssh ${REMOTE_USER}@${REMOTE_HOST} "sudo rm -rf ${REMOTE_DIR}/docker"
echo "📤 正在上传 docker 文件..."
scp -r ./docker ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}/
echo "🐳 正在远程启动 Docker 服务..."
ssh ${REMOTE_USER}@${REMOTE_HOST} << EOF
cd ${REMOTE_DIR}/docker
docker-compose -p qmodel --profile all up -d
docker restart qmodel-nginx-1
EOF
echo "🎉 部署全部完成!"