safety-eval-service/docs/build-tools
huwei df9de45730 【修改】dubbo配置;【新增】打包发布gbs相关。 2026-06-26 11:43:58 +08:00
..
Dockerfile 【修改】dubbo配置;【新增】打包发布gbs相关。 2026-06-26 11:43:58 +08:00
README.md 【修改】dubbo配置;【新增】打包发布gbs相关。 2026-06-26 11:43:58 +08:00
build.sh 【修改】dubbo配置;【新增】打包发布gbs相关。 2026-06-26 11:43:58 +08:00
build_push.py 【修改】dubbo配置;【新增】打包发布gbs相关。 2026-06-26 11:43:58 +08:00
install_env.sh 【修改】dubbo配置;【新增】打包发布gbs相关。 2026-06-26 11:43:58 +08:00

README.md

GBS Java 应用 Docker 镜像打包操作流程

目录结构

build-tools/
├── README.md           ← 本文档
├── Dockerfile          ← Dockerfile 模板CentOS 7 + JDK 1.8.0_202
├── build.sh            ← Shell 构建脚本(在 master 节点上执行)
├── build_push.py       ← Python 构建脚本(在本地 Windows 上执行,自动上传+构建+推送)
└── install_env.sh      ← 构建环境一键安装脚本(在 master 节点上执行)

环境信息

项目 信息
Master 节点 192.168.20.100 (root / Zcloud@zcloud100)
OS CentOS 7 (已 EOLyum 源已切换阿里云 vault)
JDK Oracle JDK 1.8.0_202,路径 /opt/jdk1.8.0_202
Maven Apache Maven 3.8.8,路径 /opt/maven,阿里云镜像
Docker 26.1.4cgroupdriver=systemdstorage=overlay2
ACR 仓库 jjb-registry-registry.cn-hangzhou.cr.aliyuncs.com
ACR 命名空间 ali_img_ns
K8s 命名空间 jjb-dragon

镜像命名规则

完整镜像地址格式:

{ACR仓库}/{命名空间}/prod-aly-{环境前缀}-dragon-{应用名}:{环境前缀}-{日期}-{序号}

示例:

jjb-registry-registry.cn-hangzhou.cr.aliyuncs.com/ali_img_ns/prod-aly-ota-dragon-jjb-saas-safety-eval:ota-20260626-1

各部分说明:

  • prod-aly — 固定前缀(生产环境-阿里云)
  • ota — 环境前缀,对应不同业务模块
  • dragon — 项目代号
  • jjb-saas-safety-eval — 应用名称
  • ota-20260626-1 — 标签:环境前缀-年月日-序号(同一天多次构建递增序号)

方式一:本地一键构建(推荐)

在本地 Windows 机器上执行 build_push.py,自动完成 JAR 上传 → Docker 构建 → ACR 推送。

前置条件: 本地已安装 Python 和 paramikopip install paramiko

执行命令:

python build_push.py <JAR文件路径> <应用名> <环境前缀> [序号]

示例:

python build_push.py E:\projects\safety-eval-service\safety-eval-start\target\safety-eval-start-1.0-SNAPSHOT.jar jjb-saas-safety-eval ota 1

输出:

Image Address:
  jjb-registry-registry.cn-hangzhou.cr.aliyuncs.com/ali_img_ns/prod-aly-ota-dragon-jjb-saas-safety-eval:ota-20260626-1

方式二:在 Master 节点上构建

SSH 登录 master 节点后,使用 build.sh 脚本构建。

Step 1 — 上传 JAR 到 master 节点

在本地用 scp 或其他方式上传 JAR

scp safety-eval-start-1.0-SNAPSHOT.jar root@192.168.20.100:/tmp/

Step 2 — SSH 登录 master

ssh root@192.168.20.100
# 密码: Zcloud@zcloud100

Step 3 — 执行构建脚本

source /etc/profile.d/java.sh
source /etc/profile.d/maven.sh
/opt/docker-templates/build.sh jjb-saas-safety-eval ota /tmp/safety-eval-start-1.0-SNAPSHOT.jar 1

脚本会自动完成:准备构建上下文 → 复制 JDK → Docker build → Docker login ACR → Docker push。


方式三:手动分步操作

如果需要手动控制每一步:

Step 1 — 准备构建目录

BUILD_DIR=/tmp/manual-build
rm -rf $BUILD_DIR && mkdir -p $BUILD_DIR/target

Step 2 — 复制 JDK 和 JAR

cp -r /opt/jdk1.8.0_202 $BUILD_DIR/
cp /path/to/your-app.jar $BUILD_DIR/target/
cp /opt/docker-templates/Dockerfile $BUILD_DIR/

Step 3 — Docker Build

docker build -t jjb-registry-registry.cn-hangzhou.cr.aliyuncs.com/ali_img_ns/prod-aly-ota-dragon-jjb-saas-safety-eval:ota-20260626-1 $BUILD_DIR

Step 4 — 登录 ACR

echo 'idurCT!rIq9EzISD' | docker login --username=10952138@qq.com --password-stdin jjb-registry-registry.cn-hangzhou.cr.aliyuncs.com

Step 5 — 推送镜像

docker push jjb-registry-registry.cn-hangzhou.cr.aliyuncs.com/ali_img_ns/prod-aly-ota-dragon-jjb-saas-safety-eval:ota-20260626-1

Step 6 — 清理

rm -rf $BUILD_DIR

从源码构建Maven 打包 + Docker 构建)

如果拿到的是 Java 源码而不是编译好的 JAR

source /etc/profile.d/java.sh
source /etc/profile.d/maven.sh

# Maven 编译打包
cd /path/to/project
mvn clean package -DskipTests

# 然后用编译好的 JAR 走上面的构建流程
/opt/docker-templates/build.sh <app-name> <env-prefix> target/xxx.jar 1

Maven 已配置阿里云镜像(maven.aliyun.com/repository/public),依赖下载速度约 200-400 KB/s。


K8s 部署命令

创建新 Deployment

/usr/bin/kubectl create deployment jjb-saas-safety-eval \
  --image=jjb-registry-registry.cn-hangzhou.cr.aliyuncs.com/ali_img_ns/prod-aly-ota-dragon-jjb-saas-safety-eval:ota-20260626-1 \
  -n jjb-dragon --replicas=1

更新已有 Deployment 的镜像:

/usr/bin/kubectl set image deployment/jjb-saas-safety-eval \
  jjb-saas-safety-eval=jjb-registry-registry.cn-hangzhou.cr.aliyuncs.com/ali_img_ns/prod-aly-ota-dragon-jjb-saas-safety-eval:ota-20260626-1 \
  -n jjb-dragon

查看 Pod 状态:

/usr/bin/kubectl get pods -n jjb-dragon | grep safety-eval

查看日志:

/usr/bin/kubectl logs -f deployment/jjb-saas-safety-eval -n jjb-dragon

查看 Deployment 详情:

/usr/bin/kubectl describe deployment jjb-saas-safety-eval -n jjb-dragon

常用查询命令

查看本地镜像:

docker images | grep jjb-saas-safety-eval

查看镜像详情:

docker inspect jjb-registry-registry.cn-hangzhou.cr.aliyuncs.com/ali_img_ns/prod-aly-ota-dragon-jjb-saas-safety-eval:ota-20260626-1

查看镜像构建历史:

docker history jjb-registry-registry.cn-hangzhou.cr.aliyuncs.com/ali_img_ns/prod-aly-ota-dragon-jjb-saas-safety-eval:ota-20260626-1

本地测试运行:

docker run --rm -it --name safety-eval-test \
  -p 8080:8080 \
  jjb-registry-registry.cn-hangzhou.cr.aliyuncs.com/ali_img_ns/prod-aly-ota-dragon-jjb-saas-safety-eval:ota-20260626-1

列出 ACR 上所有已有镜像:

docker images --format '{{.Repository}}:{{.Tag}}' | grep 'ali_img_ns'

构建环境安装

首次使用新机器时,运行 install_env.sh 一键安装全部构建依赖:

ssh root@192.168.20.100
bash install_env.sh

该脚本会安装并配置JDK 1.8.0_202、Maven 3.8.8阿里云镜像、Dockerfile 模板、yum vault 源、ACR 登录。


Dockerfile 结构说明

镜像内部结构(从已有运行镜像逆向分析得出):

/
├── opt/
│   ├── jdk1.8.0_202/     ← Oracle JDK 1.8.0_202
│   ├── app.jar           ← 应用 JAR 包
│   └── logs/             ← 日志目录

容器启动命令ENTRYPOINT

/opt/jdk1.8.0_202/bin/java
  -Dnacos.namespace=jjb-dragon
  -Dnacos.url=prod-nacos:8848
  -Dspring.profiles.active=prod
  -Dmysql.password=***
  -Dmysql.host=192.168.20.100
  -Dmysql.port=33080
  -Dmysql.username=root
  -jar /opt/app.jar

运行时可通过 K8s deployment 的 argsenv 字段覆盖以上参数。


故障排查

问题:yum install 报错 404 CentOS 7 已 EOL确认 /etc/yum.repos.d/CentOS-Base.repo 使用 centos-vaultinstall_env.sh 会自动处理)。

问题Maven 下载依赖慢 检查 /root/.m2/settings.xml 是否配置了阿里云镜像mirrorOf 应为 central

问题:docker push 报 unauthorized 重新登录 ACRecho 'idurCT!rIq9EzISD' | docker login --username=10952138@qq.com --password-stdin jjb-registry-registry.cn-hangzhou.cr.aliyuncs.com

问题K8s 拉取镜像失败 (ImagePullBackOff) 确认 jjb-dragon namespace 下有 image-pull-secretimage-pull-secret1

/usr/bin/kubectl get secret -n jjb-dragon | grep image-pull