





























一、生在jar并上传.91.164主机


版本号202607190940
<properties>
<!-- 新增时间戳格式 -->
<maven.build.timestamp.format>yyyyMMddHHmm</maven.build.timestamp.format>
</properties>
<build>
<!-- 打包带日期jar名 -->
<finalName>${project.artifactId}${maven.build.timestamp}</finalName><!-- 3. 【关键】添加 SSH 扩展支持,否则无法使用 scp 协议 -->
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh</artifactId>
<version>3.5.3</version>
</extension>
</extensions><plugins>
<!-- 打包 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring.boot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal> <!-- 将引入的 jar 打入其中 -->
</goals>
</execution>
</executions>
</plugin><!-- 4. 自动上传插件 -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>wagon-maven-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<!-- 对应 settings.xml 中的 ID -->
<serverId>remote-server</serverId>
<!-- 待上传的文件路径 (target目录下) -->
<fromFile>${project.build.directory}/${project.artifactId}${maven.build.timestamp}.jar</fromFile>
<!-- 远程服务器地址: scp://用户名@IP/目标目录 -->
<url>scp://root@192.168.91.164/home/biz</url>
</configuration><!-- 绑定生命周期:在执行完 package 后,自动执行 upload-single -->
<executions>
<execution>
<id>upload-deploy</id>
<phase>package</phase>
<goals>
<goal>upload-single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>


二 、脚本执行

1、生成镜像
./1biz-build.sh 202607190940

3、镜像导出tar
./2biz-save.sh 202607190940

4、tar推送到k8s节点的镜像
./3biz-pull-k8s.sh 202607190940

k8s-master查看镜像



三、kubeSphere 的yaml版本升级


旧版:yudao-server:20260716
新版:192.168.91.164/rouyi-biz/yudao-server:202607190940
192.168.91.164/rouyi-biz/yudao-web:20260908
6、参考脚本
1biz-build.sh
#!/bin/bash
# 判断是否传入参数
if [ $# -ne 1 ]; then
echo "使用方式:$0 版本号"
echo "示例:$0 202607190832"
exit 1
fi
# 接收传入的第一个参数作为版本TAG
TAG="$1"
JAR_NAME="yudao-server${TAG}.jar"
IMAGE_FULL="192.168.91.164/rouyi-biz/yudao-server:${TAG}"
# 前置校验Jar文件是否存在
if [ ! -f "./${JAR_NAME}" ]; then
echo "错误:当前目录未找到文件 ${JAR_NAME}"
exit 2
fi
echo "✅ 校验通过,Jar包:${JAR_NAME}"
# 构建镜像
echo "🔨 开始构建镜像 ${IMAGE_FULL}"
docker build \
--build-arg JAR_TAG="${TAG}" \
-t "${IMAGE_FULL}" \
.
# 判断构建结果,成功则推送镜像
if [ $? -eq 0 ]; then
echo "📤 构建成功,推送镜像到私有仓库..."
docker push "${IMAGE_FULL}"
echo "✅ 镜像推送完成:${IMAGE_FULL}"
else
echo "❌ 镜像构建失败,终止流程"
exit 3
fi
2biz-save.sh
#!/bin/bash
# 传入版本号参数导出yudao-server镜像tar包
# 校验入参数量
if [ $# -ne 1 ]; then
echo "使用方式:$0 版本号"
echo "示例:$0 20260731"
echo "作用:导出镜像 192.168.91.164/rouyi-biz/yudao-server:传入版本号 为tar文件"
exit 1
fi
# 接收版本TAG
TAG="$1"
IMAGE_NAME="192.168.91.164/rouyi-biz/yudao-server:${TAG}"
TAR_FILE="yudao-server${TAG}.tar"
# 校验本地镜像是否存在
if ! docker images --format "{{.Repository}}:{{.Tag}}" | grep -x "${IMAGE_NAME}" >/dev/null 2>&1; then
echo "× 本地未找到镜像 ${IMAGE_NAME},无法导出"
exit 2
fi
echo "▶ 开始导出镜像:${IMAGE_NAME}"
echo "▶ 导出文件名称:${TAR_FILE}"
docker save -o "${TAR_FILE}" "${IMAGE_NAME}"
# 判断导出结果
if [ $? -eq 0 ]; then
echo "√ 镜像导出成功!文件:${TAR_FILE}"
# 打印文件大小
ls -lh "${TAR_FILE}"
else
echo "× 镜像导出失败"
exit 3
fi
#!/bin/bash
# 批量分发镜像tar并远端导入docker
# 使用方式 ./biz-pull-k8s.sh 版本号
# 入参校验
if [ $# -ne 1 ]; then
echo "使用方式:$0 版本号"
echo "示例:$0 202607311742"
echo "功能:将本地yudao-server{版本}.tar分发至166-master/167-node/168-node三台机器并自动导入镜像"
exit 1
fi
# 变量配置
TAG="$1"
TAR_FILE="yudao-server${TAG}.tar"
LOCAL_TAR="./${TAR_FILE}"
REMOTE_PATH="/root/${TAR_FILE}"
SSH_PASSWORD="root"
# 目标机器列表
NODE_LIST=(
"192.168.91.166"
"192.168.91.167"
"192.168.91.168"
)
# 校验本地tar文件是否存在
if [ ! -f "${LOCAL_TAR}" ]; then
echo "❌ 本地文件 ${LOCAL_TAR} 不存在,请先执行docker save导出镜像!"
exit 2
fi
echo "====================================="
echo "待分发文件:${LOCAL_TAR}"
echo "目标节点:${NODE_LIST[*]}"
echo "远端账号密码:root / root"
echo "====================================="
# 循环遍历每台机器执行上传+导入
for node in "${NODE_LIST[@]}"; do
echo -e "\n==================== 开始处理节点 ${node} ===================="
# 1. scp上传tar包
echo "[1/3] 上传文件至 ${node}:/root/"
sshpass -p ${SSH_PASSWORD} scp "${LOCAL_TAR}" root@${node}:/root/
if [ $? -ne 0 ]; then
echo "❌ ${node} 文件上传失败,跳过当前节点"
continue
fi
echo "✅ ${node} 文件上传完成"
# 2. 远端导入docker镜像,导入后自动删除远端tar包释放磁盘
echo "[2/3] 在${node}执行docker load导入镜像"
sshpass -p ${SSH_PASSWORD} ssh root@${node} "docker load -i ${REMOTE_PATH} && rm -f ${REMOTE_PATH}"
if [ $? -ne 0 ]; then
echo "❌ ${node} 镜像导入失败"
continue
fi
echo "✅ ${node} 镜像导入成功,已清理远端tar包"
# 3. 查看当前节点yudao-server镜像列表做校验
echo "[3/3] 校验${node}已导入镜像:"
sshpass -p ${SSH_PASSWORD} ssh root@${node} "docker images | grep yudao-server"
done
echo -e "\n==================== 全部节点执行完毕 ===================="
Dockerfile
## 基础镜像
FROM eclipse-temurin:25-jre
# 定义构建时参数:JAR_TAG,兜底默认值防止不传参报错
ARG JAR_TAG=20260718
## 创建工作目录
RUN mkdir -p /yudao-server
WORKDIR /yudao-server
## 关键修改:直接复制当前目录下的完整jar文件名
## COPY ./yudao-server20260718.jar app.jar
# 动态拼接完整jar文件名
COPY ./yudao-server${JAR_TAG}.jar app.jar
## 时区、JVM参数不变
ENV TZ=Asia/Shanghai
ENV JAVA_OPTS="-Xms512m -Xmx512m -Djava.security.egd=file:/dev/./urandom"
ENV ARGS=""
## 暴露端口
EXPOSE 48080
## 启动命令
ENTRYPOINT ["sh","-c","java $JAVA_OPTS -jar app.jar $ARGS"]
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。