x86 + ARM 一次构建,自动推送:打造高效镜像交付体系的全过程

56 阅读5分钟

在后台服务交付过程中,多架构(x86/ARM)构建始终是团队的痛点:流程分散、步骤复杂、容易出错,且不同人员操作方式不一致,最终导致交付体验不稳定。尤其在国产化环境快速推进的背景下,ARM 架构需求持续增加,构建成本随之升高。

为彻底解决这些问题,我们基于 Maven + Docker Buildx 构建了一套“一键式、多架构、自动化、可复用”的镜像构建体系,实现了真正意义上的平台化、标准化与版本化构建流程,并已在 qData、qKnow、qModel、qThing 等平台全面落地。


一、为什么要做统一构建?

在构建镜像的过程中,我们先后遇到以下痛点:

  1. x86 和 ARM 镜像需要分别构建,流程分散,人工操作多。
  2. 镜像的 授权加密 需要额外跑脚本,重复且容易漏步骤。
  3. 构建难以复用,每次都要重新打包、上传,且没有稳定的版本概念。
  4. Docker Buildx 命令太长太繁琐,不适合作为团队通用流程。
  5. 单独构建的镜像 无法提供统一的多架构 manifest,用户拉取镜像时还要确认架构类型。
  6. 不同同事打包流程不一致,容易出错,很难做到“防呆”。
  7. 镜像长期没有版本号,仓库内容杂乱,不便管理与溯源。

这些问题累在一起,会导致:

  • 交付效率低
  • 人工流程易错
  • 运维部署困难
  • 镜像管理混乱

因此我们设计了一整套 自动化、多架构、可版本化、可复用的标准化构建体系


二、方案亮点:一条 Maven 命令做完所有事

1. Maven 调用 Docker Buildx,一次同时构建 x86 + ARM

传统方式需要构建两次:

docker build --platform linux/amd64
docker build --platform linux/arm64

现在通过 Maven 生命周期 统一收敛:

mvn clean package docker:buildx

多架构镜像在一次编译中自动产出。


2. 自动生成镜像、加密包、解密器,不再手动跑脚本

构建过程中自动生成:

  • 镜像(标准/加密)
  • 加密安装包
  • 解密工具

不需要记流程、不需要手动执行脚本,完全自动化


3. 构建后自动推送镜像到镜像仓库

构建完成后 Maven 会自动执行:

docker buildx build --push ...

无需再手动上传或传安装包给客户。

部署方只需执行:

docker pull qiantongtech/xxx:1.2.3

即可自动拉取正确架构的镜像。


4. 镜像内已同时支持达梦 / MySQL,无需重新打包

镜像采用了双数据库适配模式:

  • 内置配置自动检测 DB 类型
  • 支持 MySQL 与国产达梦
  • 切换数据库不需要重新构建

大幅提升交付灵活性。


5. 内置常用基础镜像,外网环境更友好

为外网部署特别准备了:

  • JDK 镜像
  • Maven 镜像
  • Node 镜像
  • Python 镜像
  • 多种 Linux 工具镜像

首次部署时无需从公网拉取大量基础镜像,极大缓解网络限制问题。


6. 自动生成多架构 manifest,用户拉镜像无需关心平台

构建中自动生成 manifest:

docker manifest create ...

最终用户执行:

docker pull product/image:1.2.3

系统会自动根据机器架构选择对应镜像,无需再问:

“你是 ARM 还是 x86?”


7. 所有命令统一收敛到 Maven 生命周期,只需一条命令

整个构建流程只需要:

mvn clean package

即可完成:

  • 编译
  • 打包
  • buildx 多架构构建
  • 生成加密包
  • 生成解密器
  • 推送镜像
  • 生成 manifest
  • 自动加版本号

真正实现:

“按一下就行”


8. 规范化流程后,实现真正的“防呆”设计

所有容易出错的步骤(加密、打包、推送、manifest、版本号)都写进流程中,不再依赖个人经验。


9. 构建时自动带版本号,镜像仓库清晰可追踪

基于 Maven+Git 自动生成版本编号:

  • 每次构建都会带版本号
  • 仓库中可清晰查看版本迭代
  • 回溯某次构建非常容易

真正做到 可管理、可复用、可回溯


10. 历史版本镜像可直接复用,无需重新构建

因为版本号固定,历史镜像可直接:

docker pull product-image:1.0.5

无需回退代码、重新构建。


三、落地成效:已在多个产品全面使用

这套体系目前已全面应用于:

  • qData 数据中台
  • qKnow 知识平台
  • qModel 算法模型平台
  • qThing 物联网平台

交付效率提升超过 200%,从“人工打包 + 多人协作 + 易错”变为:

  • 标准化
  • 自动化
  • 多架构兼容
  • 内置加密流程
  • 一键构建 & 一键部署

真正实现了企业级交付体系的规范化。


四、总结

通过 Maven + Docker Buildx 的一体化设计,我们实现了:

  • x86/ARM 一次构建
  • 加密流程自动化
  • 构建&推送流水线固化
  • 统一版本号管理
  • 多产品、多环境可复用
  • Docker manifest 自动生成
  • 更稳定、更快速的交付体系

目前这套方案已在公司内部多个平台稳定运行,并持续优化完善。如果你所在的团队也正在为镜像构建、架构兼容、交付流程复杂而苦恼,不妨尝试引入类似机制,让交付效率“飞”起来。