1、ruoyi-web端端打包dist并上传到master节点主机
上传到master节点【192.168.91.166/home/web/】目录下
注:master:166,home/web/为后端dist-prod打包镜像使用
比如版本号202607311620
1.1、npm run build:prod打包dist-prod


1.2、dist-prod上传到master节点【192.168.91.166/home/web/dist】目录下

1.3、hbuilderx-bash 免登录
###Bash 执行生成密钥
ssh-keygen -t rsa
####一路回车,无需设置密码

####公钥到master-166节点:
ssh-copy-id root@192.168.91.166
输入一次服务器 root 密码后,后续登录不再需要密码
1.4、打包dist-prod上传到master节点【192.168.91.166/home/web】目录下
赋予脚本执行权限并运行:
chmod +x build_upload.sh
./build_upload.sh


2、dist 构成镜像并推送到私库192.168.91.164:harbor
######master节点【192.168.91.166/home/web】执行构成镜像并上传到私库192.168.91.164:harbor
2.1 DockerFile 文件内容如下
# 基础Nginx镜像
FROM swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/u-sb/nginx:latest
# 1. 全局定义构建参数VERSION,构建时传入,默认兜底dist兼容旧流程
# FROM内部重新声明AR
ARG VERSION=""
# 只清理默认页面,不删除sites配置文件
RUN rm -rf /var/www/html/*
# 复制自定义配置到conf.d,Nginx会自动加载该目录下所有.conf
COPY nginx.conf /etc/nginx/conf.d/default.conf
# 你想要新增的一行(本地必须有site-default.conf文件,否则build报错)
COPY nginx.conf /etc/nginx/sites-enabled/default
# 复制前端dist静态资源
#COPY dist /var/www/html
# 拼接目录 yudao-web${VERSION},完全对应你要的 yudao-web版本号
COPY yudao-web${VERSION} /var/www/html
# 前台运行Nginx,防止容器退出重启
CMD ["nginx", "-g", "daemon off;"]
2.2 nginx.conf文件内容如下

2.3 本地构成镜像docker build -t yudao-web:202607311003 .
docker build -t yudao-web:202607311003 .
###授权执行权限chmod +x 1web-build.sh
####执行构成镜像脚本1biz-build.sh
./1web-build.sh 202607311620
#####参数为web的yudao-web202607311620的版本号

2.4 镜像推送到私库192.168.91.164:harbor
#先打上 Harbor 仓库标签
docker tag yudao-web:202607311003 192.168.91.164/rouyi-biz/yudao-web:202607311003
# 推送harbor
docker push 192.168.91.164/rouyi-biz/yudao-web:202607311003
赋予执行权限 chmod +x 2web-pull.sh
./2web-pull.sh 202607311620
#####参数为web的202607311620的版本号

3、kubeSphere 的yaml文件的image:版本更新



旧版本:202607311003
新版本:202607311620
4、build_upload.sh及1web-build.sh及2web-pull.sh脚本及readme内容
build_upload.sh脚本
#!/bin/bash
# 接收第一个入参:格式 YYYYMMDDHHMM
TIME_TAG="$1"
# 未传参则自动生成 当前年月日时分
if [ -z "${TIME_TAG}" ]; then
TIME_TAG=$(date +%Y%m%d%H%M)
fi
# 拼接远端完整目录
REMOTE_BASE="/home/web"
REMOTE_DIR="${REMOTE_BASE}/yudao-web${TIME_TAG}"
echo "==================== 发布信息 ===================="
echo "打包产物:dist-prod"
echo "远端目标目录:${REMOTE_DIR}"
echo "=================================================="
echo "===== 1. 执行生产打包 npm run build:prod ====="
npm run build:prod
if [ $? -ne 0 ]; then
echo "❌ 打包失败,终止上传流程"
exit 1
fi
echo "===== 2. 服务器自动创建目录(不存在则新建) ====="
ssh root@192.168.91.166 "mkdir -p ${REMOTE_DIR}"
echo "===== 3. 清空目标目录旧文件 ====="
ssh root@ "rm -rf ${REMOTE_DIR}/*"
echo "===== 4. 上传本地 dist-prod 全部资源 ====="
scp -r dist-prod/* root@192.168.91.166:${REMOTE_DIR}/
echo "✅ 打包上传完成,资源路径:${REMOTE_DIR}"
1web-build.sh脚本
#!/bin/bash
# 使用示例: ./1web-build.sh 202607311620
if [ $# -ne 1 ];then
echo "✖ 参数错误!正确用法:$0 版本数字"
echo "示例:$0 202607311620"
exit 1
fi
VERSION="$1"
IMAGE_TAG="yudao-web:${VERSION}"
RES_DIR="./yudao-web${VERSION}"
echo "======================================"
echo "资源目录:${RES_DIR}"
echo "镜像标签:${IMAGE_TAG}"
echo "传递构建参数 VERSION=${VERSION}"
echo "======================================"
if [ ! -d "${RES_DIR}" ];then
echo "✖ 错误:目录【${RES_DIR}】不存在!"
exit 1
fi
echo "开始构建镜像..."
docker build --build-arg VERSION=${VERSION} -t "${IMAGE_TAG}" .
if [ $? -eq 0 ];then
echo -e "\n☑ 镜像构建成功:${IMAGE_TAG}"
else
echo -e "\n✖ 镜像构建失败!"
exit 1
fi
2web-pull.sh脚本
#!/bin/bash
# 使用方式: ./2web-pull.sh 202607311620
if [ $# -ne 1 ];then
echo "❌ 参数错误!使用示例:$0 202607311620"
exit 1
fi
VERSION="$1"
LOCAL_IMG="yudao-web:${VERSION}"
HARBOR_IMG="192.168.91.164/rouyi-biz/yudao-web:${VERSION}"
echo "============================================="
echo "本地镜像:${LOCAL_IMG}"
echo "Harbor目标镜像:${HARBOR_IMG}"
echo "============================================="
# 改用docker images精确匹配,规避inspect偶发异常
if ! docker images --format '{{.Repository}}:{{.Tag}}' | grep "^${LOCAL_IMG}$" >/dev/null 2>&1;then
echo "❌ 错误:本地镜像 ${LOCAL_IMG} 不存在,无法推送!"
exit 1
fi
echo "▶ 执行打标签 docker tag ..."
docker tag "${LOCAL_IMG}" "${HARBOR_IMG}"
if [ $? -ne 0 ];then
echo "❌ 镜像打标签失败!"
exit 1
fi
echo "▶ 执行推送 docker push ..."
docker push "${HARBOR_IMG}"
if [ $? -eq 0 ];then
echo -e "\n✅ 推送成功!${HARBOR_IMG}"
else
echo -e "\n❌ 推送失败!检查Harbor登录、网络连通性"
exit 1
fi
else
echo -e "\n❌ 推送失败!检查Harbor地址、登录状态、项目权限"
exit 1
fi
浙公网安备 33010602011771号