Appearance
CI/CD流水线设计
**本文引用的文件** - [JenkinsCommon.groovy](file://lemes-cloud/src/devops/JenkinsCommon.groovy) - [Jenkinsfile(前端 lemeweb)](file://dm/lemes-web/Jenkinsfile) - [Jenkinsfile(后端 lemes-cloud)](file://lemes-cloud/Jenkinsfile) - [Jenkinsfile(后端业务模块 lemes-business-devicemate)](file://lemes-cloud/lemes-business-devicemate/Jenkinsfile) - [Jenkinsfile(认证服务 lemes-auth)](file://lemes-cloud/lemes-auth/Jenkinsfile) - [Jenkinsfile(网关 lemes-gateway)](file://lemes-cloud/lemes-gateway/Jenkinsfile) - [Jenkinsfile(作业模块 lemes-job-devicemate)](file://lemes-job-devicemate/Jenkinsfile) - [Dockerfile(后端通用)](file://lemes-cloud/src/devops/Dockerfile) - [devops-ci.yml(后端通用)](file://lemes-cloud/devops-ci.yml) - [console-config.json(控制台配置)](file://lemes-cloud/src/devops/console/console-config.json) - [docker-compose.yml(本地编排示例)](file://lemes-cloud/src/devops/docker-compose/docker-compose.yml)目录
引言
本设计文档面向DeviceMate项目的DevOps团队,系统化阐述基于Jenkins的CI/CD流水线设计,覆盖Pipeline语法、阶段划分、并行与条件触发、自动化构建与镜像构建、多环境部署策略(蓝绿/滚动/金丝雀/灰度)、质量门禁(代码扫描/单元/集成/安全/性能)、回滚机制、通知与报告以及运维最佳实践。文档以仓库中的Jenkinsfile与通用Groovy库为核心依据,结合Dockerfile与部署配置,形成可落地的持续交付指导。
项目结构
DeviceMate采用前后端分离与微服务架构:
- 前端:dm/lemes-web(Vue项目,使用npm构建)
- 后端:lemes-cloud(Spring Cloud多模块Maven工程,含认证、网关、业务服务、框架与公共模块)
- 作业模块:lemes-job-devicemate(独立的定时/批处理模块)
- DevOps通用能力:JenkinsCommon.groovy(统一流水线逻辑)、Dockerfile(多阶段/分层镜像)、console-config.json与docker-compose(部署与偏好分支)
图表来源
- JenkinsCommon.groovy
- Jenkinsfile(前端 lemeweb)
- Jenkinsfile(后端 lemes-cloud)
- Jenkinsfile(认证服务 lemes-auth)
- Jenkinsfile(网关 lemes-gateway)
- Jenkinsfile(作业模块 lemes-job-devicemate)
- Dockerfile(后端通用)
- console-config.json(控制台配置)
- docker-compose.yml(本地编排示例)
- devops-ci.yml(后端通用)
章节来源
- JenkinsCommon.groovy
- Jenkinsfile(前端 lemeweb)
- Jenkinsfile(后端 lemes-cloud)
- Jenkinsfile(认证服务 lemes-auth)
- Jenkinsfile(网关 lemes-gateway)
- Jenkinsfile(作业模块 lemes-job-devicemate)
- Dockerfile(后端通用)
- console-config.json(控制台配置)
- docker-compose.yml(本地编排示例)
- devops-ci.yml(后端通用)
核心组件
- 通用流水线库:JenkinsCommon.groovy封装了代码检出、构建(Maven/Node)、镜像构建与推送、Rancher/Kubernetes部署、Sonar扫描、混淆等通用能力,支持按分支配置部署目标、子模块同步、自定义构建命令、JDK版本切换等。
- 前端流水线:dm/lemes-web/Jenkinsfile通过Library引用通用库,配置分支到环境映射、子模块视图同步、禁用通用Dockerfile(使用自有构建链路)。
- 后端流水线:lemes-cloud/Jenkinsfile与各微服务模块Jenkinsfile复用通用库,支持自定义构建命令、禁用镜像构建(仅发布war或跳过打包)、启用Sonar与代码混淆。
- 部署与偏好:console-config.json定义Harbor仓库、分支偏好、目标集群映射;docker-compose.yml展示容器编排示例,便于本地验证与一致性对照。
章节来源
- JenkinsCommon.groovy
- Jenkinsfile(前端 lemeweb)
- Jenkinsfile(后端 lemes-cloud)
- Jenkinsfile(认证服务 lemes-auth)
- Jenkinsfile(网关 lemes-gateway)
- Jenkinsfile(作业模块 lemes-job-devicemate)
- console-config.json(控制台配置)
- docker-compose.yml(本地编排示例)
架构总览
下图展示了从代码提交到多环境部署的整体流程,包括代码检出、构建、镜像构建与推送、Rancher自动部署、质量门禁与结果判定。
图表来源
- JenkinsCommon.groovy
- Jenkinsfile(前端 lemeweb)
- Jenkinsfile(后端 lemes-cloud)
- Jenkinsfile(认证服务 lemes-auth)
- Jenkinsfile(网关 lemes-gateway)
- Jenkinsfile(作业模块 lemes-job-devicemate)
详细组件分析
通用流水线库(JenkinsCommon.groovy)
- 功能要点
- 代码检出与子模块同步:支持递归子模块更新,按分支选择性更新指定子模块路径。
- 构建策略:前端使用Node镜像内部执行npm install与构建;后端使用Maven打包与部署。
- 镜像构建与推送:支持通用Dockerfile(多阶段+分层)与Maven docker插件两种方式;自动登录Harbor并推送latest标签(master分支)。
- 部署策略:通过Rancher控制台接口按集群与实例编码批量升级Pod镜像,支持失败标记为UNSTABLE。
- 质量门禁:可选Sonar扫描;可选代码混淆(后端)。
- 工具链:声明JDK/Maven工具链,打印版本信息,确保构建一致性。
- 分支与环境映射:内置多集群映射表,按分支动态选择部署目标。
- 关键配置项
- buildDockerModuleList:自定义镜像构建模块列表。
- willDeploy:按分支配置部署环境列表。
- buildCommand:自定义构建命令(可按分支覆盖)。
- commonDockerfile:是否使用通用Dockerfile。
- dockerBuild:是否执行镜像构建与推送。
- sonar:是否执行Sonar扫描。
- confusion:是否启用混淆(后端)。
- jdk:JDK版本(amazon-corretto-11/17)。
- submodule:子模块同步策略(列表或按分支映射)。
图表来源
章节来源
前端流水线(dm/lemes-web/Jenkinsfile)
- 配置要点
- 分支到环境映射:develop/pgsql-develop等分支映射至多套UAT/SIT环境。
- 子模块视图:按分支选择性同步特定视图模块(如devicemate、pcg、dms等)。
- 禁用通用Dockerfile:前端使用自有构建链路,不走通用镜像。
- 触发与并行
- 支持按分支触发;可在Jenkins中配置参数化构建与分支过滤。
- 建议在Jenkinsfile中增加parallel阶段以并行执行不同环境的部署校验。
章节来源
后端流水线(lemes-cloud/Jenkinsfile)
- 配置要点
- 自定义构建命令:使用Maven聚合构建,跳过测试。
- 禁用镜像构建:仅发布war或跳过打包,由其他Job负责镜像构建。
- JDK版本:指定amazon-corretto-17。
- 适用场景
- 作为顶层聚合Job,协调多模块构建与发布节奏。
章节来源
业务模块流水线(lemes-business-devicemate/Jenkinsfile)
- 配置要点
- 单模块构建:使用Maven-N参数仅构建当前模块,跳过测试。
- 禁用镜像构建:与顶层一致,聚焦构建与发布。
- 适用场景
- 当业务模块需要独立构建与发布时使用。
章节来源
认证服务流水线(lemes-auth/Jenkinsfile)
- 配置要点
- 指定部署分支:devicemate-saas-develop映射至devicemate-uat。
- 启用Sonar与混淆:提升代码质量与安全性。
- JDK版本:amazon-corretto-17。
- 适用场景
- 关键服务的独立发布与质量保障。
章节来源
网关流水线(lemes-gateway/Jenkinsfile)
- 配置要点
- 指定部署分支:develop映射至hungary-uat/lssc-uat。
- 启用Sonar与混淆。
- JDK版本:amazon-corretto-17。
- 适用场景
- 网关作为流量入口,需严格的质量与安全控制。
章节来源
作业模块流水线(lemes-job-devicemate/Jenkinsfile)
- 配置要点
- buildOneModuleEachTime:按模块分别构建,支持对特定模块设置dockerBuild=false或自定义buildCommand。
- 适用场景
- 多模块仓库中需要精细化控制各模块构建与发布。
章节来源
镜像构建与推送(Dockerfile)
- 设计要点
- 多阶段+分层:利用Spring Boot Layertools将依赖与应用代码分离,减少镜像层数与增量更新体积。
- 参数化:支持ARTIFACT_ID、BRANCH、NACOS_ADDR等参数注入。
- 启动参数:整合Nacos元数据、启动时间、IP等信息,便于观测与追踪。
- 与通用库配合
- 通用库在构建阶段生成镜像tag(分支-时间戳),并在master分支同时推送latest标签。
章节来源
质量门禁与报告(devops-ci.yml)
- 设计要点
- 准备阶段:准备临时Maven本地仓库缓存。
- 构建阶段:打包war(跳过测试)。
- Sonar阶段:执行Sonar扫描并输出报告。
- 适用场景
- 作为独立质量门禁Job,或与主流水线并行执行。
章节来源
部署策略与环境映射(console-config.json)
- 设计要点
- Harbor仓库列表与代理配置。
- 分支偏好与目标集群映射,支持按环境选择优先分支。
- 忽略副本的服务列表(如nacos/redis/zookeeper),避免误升级。
- 适用场景
- 与通用库的clusters映射配合,实现按分支自动部署到多集群。
章节来源
本地编排与一致性验证(docker-compose.yml)
- 设计要点
- 展示服务镜像版本与端口映射,便于本地验证与回归测试。
- 适用场景
- 在本地或测试环境快速拉起服务,核对镜像与配置一致性。
章节来源
依赖关系分析
- 组件耦合
- 各Jenkinsfile均依赖JenkinsCommon.groovy,实现高度复用与一致性。
- 前端与后端分别采用不同的构建链路(npm vs Maven),但共享相同的部署与质量门禁策略。
- 外部依赖
- Harbor私有镜像仓库、Rancher控制台接口、SonarQube质量平台、Nacos配置中心。
- 潜在风险
- 子模块同步失败、镜像推送失败、Rancher接口调用失败可能导致UNSTABLE/FAILURE。
- 分支偏好与部署目标不匹配可能引发错误部署。
图表来源
- JenkinsCommon.groovy
- Jenkinsfile(前端 lemeweb)
- Jenkinsfile(后端 lemes-cloud)
- Jenkinsfile(认证服务 lemes-auth)
- Jenkinsfile(网关 lemes-gateway)
- Jenkinsfile(作业模块 lemes-job-devicemate)
- Dockerfile(后端通用)
章节来源
- JenkinsCommon.groovy
- Jenkinsfile(前端 lemeweb)
- Jenkinsfile(后端 lemes-cloud)
- Jenkinsfile(认证服务 lemes-auth)
- Jenkinsfile(网关 lemes-gateway)
- Jenkinsfile(作业模块 lemes-job-devicemate)
- Dockerfile(后端通用)
性能考虑
- 构建性能
- 前端:npm install使用缓存目录,避免重复下载依赖;按分支选择性子模块更新,减少无关变更影响。
- 后端:Maven使用离线缓存与批处理模式,跳过测试提升速度;多模块聚合构建时注意并行度与资源限制。
- 镜像性能
- 通用Dockerfile采用分层策略,仅更新代码层,显著降低推送与拉取耗时。
- master分支同时推送latest标签,便于docker-compose等场景快速升级。
- 部署性能
- Rancher批量升级接口按集群并发执行,建议在Jenkins中引入并行stage以缩短总耗时。
- 对于非关键服务,可先在小集群验证,再逐步扩大范围。
故障排查指南
- 代码检出失败
- 检查Git凭证与URL;确认子模块同步命令与分支一致性。
- 构建失败
- 查看Maven/Node版本与缓存;检查自定义构建命令与分支覆盖配置。
- 镜像构建/推送失败
- 检查Harbor凭证与网络连通性;确认Dockerfile参数与镜像tag格式。
- Rancher部署失败
- 核对clusters映射与实例编码;查看控制台返回的错误信息;必要时降级为单服务升级。
- Sonar扫描失败
- 检查token与Sonar服务器连通性;确认项目Key与分支命名规则。
- 回滚策略
- 若master推送latest导致问题,可回退至上一个镜像tag;若Rancher升级失败,使用相同镜像重试或回滚至上一版本。
章节来源
- JenkinsCommon.groovy
- Jenkinsfile(前端 lemeweb)
- Jenkinsfile(后端 lemes-cloud)
- Jenkinsfile(认证服务 lemes-auth)
- Jenkinsfile(网关 lemes-gateway)
- Jenkinsfile(作业模块 lemes-job-devicemate)
结论
本设计以JenkinsCommon.groovy为核心,统一前后端构建与部署策略,结合分支偏好与多集群映射,实现灵活可控的持续交付。通过质量门禁与镜像分层优化,兼顾效率与稳定性。建议在现有基础上进一步完善并行部署、灰度发布与自动化监控告警,持续提升交付质量与响应速度。
附录
- 通知与报告
- 构建状态:在Jenkins中配置邮件/IM通知;在通用库中根据结果设置SUCCESS/UNSTABLE/FAILURE。
- 测试报告:前端可接入npm测试报告;后端可集成JUnit/Cucumber报告。
- 部署报告:记录Rancher升级结果与失败原因,便于审计与回溯。
- 监控告警:结合Nacos元数据与容器日志,建立健康检查与异常告警。
- 回滚机制
- 版本管理:镜像tag采用“分支-时间戳”格式;master同时维护latest标签。
- 回滚策略:优先使用相同镜像重试;若失败,回退至上一镜像tag;对关键服务保留灰度窗口。
- 数据迁移:数据库变更采用不可逆脚本与备份策略;回滚前评估数据兼容性。
- 服务降级:在Rancher中临时缩容或切换路由,降低影响面。