离线自动化部署脚本设计与实现——企业级微服务K8s部署实践
写在前面 在企业级微服务架构的落地过程中,部署往往是最让人头疼的环节之一。特别是当你的客户要求"断网部署"、“一键安装”、“版本可追溯"时,传统的手动部署或CI/CD流水线方案就显得力不从心了。 这篇文章记录了我为某企业级微服务系统设计的一套离线自动化部署脚本——从背景痛点到架构设计,再到核心实现细节。希望能给同样面临类似场景的同行一些参考。 背景:为什么需要离线自动化部署? 痛点分析 我们团队负责的系统是基于一个成熟的企业级微服务框架二次开发的,整套系统包含: 13个核心微服务(注册中心、网关、认证、权限等) 多种中间件(MySQL、MongoDB、Redis、MinIO) ONLYOFFICE文档编辑服务 每次给客户现场部署时,我们都要面对这些问题: 耗时漫长:手动部署整套系统需要数小时,而且容易出错 网络限制:很多客户现场是内网环境,无法访问外网镜像仓库 版本混乱:手动记录版本信息容易遗漏,出问题难以追溯 环境差异:开发、测试、生产环境配置各不相同,切换困难 设计目标 基于这些问题,我确定了设计目标: 离线部署 + 一键执行 + 版本可追溯 + 多环境支持 架构设计:模块化脚本职责划分 整体方案采用Shell脚本实现(约450行核心代码),核心思路是职责分离、配置集中。 目录结构 deploy/ ├── deploy.sh # 主入口:环境准备 + 数据库初始化 ├── service.sh # K8s部署核心逻辑(install/uninstall) ├── initChart.sh # Helm Chart生成 + 版本信息SQL ├── services.sh # 服务列表定义(版本化管理) ├── vars.sh # 环境变量集中管理 ├── func.sh # 公共函数(字符串处理、分组解析) ├── k8s/ # K8s资源文件(PV/PVC/Deployment) ├── values/ # Helm Values配置(多环境支持) ├── mysql/ # 数据库初始化SQL ├── images/ # Docker镜像包(离线部署用) └── charts/ # Helm Chart包(离线部署用) 职责划分 脚本 职责 关键功能 deploy.sh 主编排 依赖检查、流程控制、数据库初始化 service.sh K8s操作 服务部署/卸载、镜像导入、Chart生成 initChart.sh Chart管理 模板渲染、版本SQL生成 services.sh 服务清单 版本化服务列表定义 vars.sh 配置中心 环境变量集中管理 func.sh 工具库 正则解析、日志输出等通用函数 这种设计让每个脚本职责单一,修改某个环节不会牵一发动全身。 ...