CI/CD流程
**本文引用的文件** - [[bi-analysis/Dockerfile]](../file/bi-analysis/dockerfile) - [[bi-api-jushuitan/Dockerfile]](../file/bi-api-jushuitan/dockerfile) - [[bi-api-leke/Dockerfile]](../file/bi-api-leke/dockerfile) - [[bi-basic/Dockerfile]](../file/bi-basic/dockerfile) - [[bi-chat/Dockerfile]](../file/bi-chat/dockerfile) - [[bi-analysis/k8s/deployment.yaml]](../file/bi-analysis/k8s/deployment.yaml) - [[bi-api-jushuitan/k8s/deployment.yaml]](../file/bi-api-jushuitan/k8s/deployment.yaml) - [[bi-basic/k8s/deployment.yaml]](../file/bi-basic/k8s/deployment.yaml) - [[bi-chat/k8s/deployment.yaml]](../file/bi-chat/k8s/deployment.yaml) - [[bi-analysis/Makefile]](../file/bi-analysis/makefile) - [[bi-api-jushuitan/Makefile]](../file/bi-api-jushuitan/makefile) - [[scripts/deploy.sh]](../file/scripts/deploy.sh) - [[scripts/port-forward.sh]](../file/scripts/port-forward.sh) - [[bi-cron/k8s/cronjob.yaml]](../file/bi-cron/k8s/cronjob.yaml) - [[bi-intra/charts/apisix/templates/apisix-config-cm.yml]](../file/bi-intra/charts/apisix/templates/apisix-config-cm.yml) - [[bi-common/registry/nacos/client.go]](../file/bi-common/registry/nacos/client.go) - [[bi-common/observability/logger/log.go]](../file/bi-common/observability/logger/log.go) - [[bi-common/database/gormx/db.go]](../file/bi-common/database/gormx/db.go) - [[bi-common/mq/kafkax/consumer.go]](../file/bi-common/mq/kafkax/consumer.go) - [[bi-common/mq/kafkax/producer.go]](../file/bi-common/mq/kafkax/producer.go) - [[bi-common/utils/envutil/env.go]](../file/bi-common/utils/envutil/env.go) - [[bi-common/auth/jwt.go]](../file/bi-common/auth/jwt.go) - [[bi-common/cache/redisx/client.go]](../file/bi-common/cache/redisx/client.go) - [[bi-common/grpcx/client.go]](../file/bi-common/grpcx/client.go) - [[bi-common/fx/fx.go]](../file/bi-common/fx/fx.go) - [[bi-common/utils/validation/validator.go]](../file/bi-common/utils/validation/validator.go) - [[bi-common/utils/converter/converter.go]](../file/bi-common/utils/converter/converter.go) - [[bi-common/utils/fileutil/fileutil.go]](../file/bi-common/utils/fileutil/fileutil.go) - [[bi-common/utils/netutil/netutil.go]](../file/bi-common/utils/netutil/netutil.go) - [[bi-common/utils/snowflake/snowflake.go]](../file/bi-common/utils/snowflake/snowflake.go) - [[bi-common/utils/strutil/strutil.go]](../file/bi-common/utils/strutil/strutil.go) - [[bi-common/utils/querybuilder/querybuilder.go]](../file/bi-common/utils/querybuilder/querybuilder.go) - [[bi-common/utils/envutil/env.go]](../file/bi-common/utils/envutil/env.go) - [[bi-common/database/starrocks/streamload/client.go]](../file/bi-common/database/starrocks/streamload/client.go) - [[bi-common/database/gormx/db.go]](../file/bi-common/database/gormx/db.go) - [[bi-common/registry/nacos/client.go]](../file/bi-common/registry/nacos/client.go) - [[bi-common/observability/logger/log.go]](../file/bi-common/observability/logger/log.go) - [[bi-common/mq/kafkax/consumer.go]](../file/bi-common/mq/kafkax/consumer.go) - [[bi-common/mq/kafkax/producer.go]](../file/bi-common/mq/kafkax/producer.go) - [[bi-common/utils/envutil/env.go]](../file/bi-common/utils/envutil/env.go) - [[bi-common/auth/jwt.go]](../file/bi-common/auth/jwt.go) - [[bi-common/cache/redisx/client.go]](../file/bi-common/cache/redisx/client.go) - [[bi-common/grpcx/client.go]](../file/bi-common/grpcx/client.go) - [[bi-common/fx/fx.go]](../file/bi-common/fx/fx.go) - [[bi-common/utils/validation/validator.go]](../file/bi-common/utils/validation/validator.go) - [[bi-common/utils/converter/converter.go]](../file/bi-common/utils/converter/converter.go) - [[bi-common/utils/fileutil/fileutil.go]](../file/bi-common/utils/fileutil/fileutil.go) - [[bi-common/utils/netutil/netutil.go]](../file/bi-common/utils/netutil/netutil.go) - [[bi-common/utils/snowflake/snowflake.go]](../file/bi-common/utils/snowflake/snowflake.go) - [[bi-common/utils/strutil/strutil.go]](../file/bi-common/utils/strutil/strutil.go) - [[bi-common/utils/querybuilder/querybuilder.go]](../file/bi-common/utils/querybuilder/querybuilder.go)
目录
简介
本指南面向BI分析平台的CI/CD与持续交付,覆盖Git工作流与分支管理策略、代码质量与安全扫描、多模块并行构建、容器化与镜像发布、Kubernetes部署与滚动更新、环境与配置管理、发布回滚与应急处理、监控告警与部署后验证,以及跨模块依赖管理与自动化可靠性保障。文档以仓库中现有配置与脚本为基础,结合通用最佳实践,形成可落地的实施蓝图。
项目结构
平台采用多模块(monorepo)组织方式,包含多个Go微服务、Python服务、前端应用与公共库,配合Kubernetes与Nacos等基础设施进行统一编排与配置管理。关键目录与职责概览:
- bi-analysis、bi-api-jushuitan、bi-api-leke、bi-basic、bi-chat 等:各微服务模块,含Dockerfile、Makefile、K8s部署清单
- bi-common:公共库,提供认证、缓存、数据库、消息队列、注册中心、可观测性等通用能力
- bi-intra:内部基础设施与运维工具(如网关、监控图表等)
- scripts:部署与联调辅助脚本
- bi-cron:定时任务(CronJob)
章节来源
- file://bi-analysis/Dockerfile#L1-L53
- file://bi-api-jushuitan/Dockerfile#L1-L53
- file://bi-api-leke/Dockerfile#L1-L53
- file://bi-basic/Dockerfile#L1-L53
- file://bi-chat/Dockerfile#L1-L38
- file://bi-analysis/k8s/deployment.yaml#L1-L54
- file://bi-api-jushuitan/k8s/deployment.yaml#L1-L56
- file://bi-basic/k8s/deployment.yaml#L1-L51
- file://bi-chat/k8s/deployment.yaml#L1-L55
核心组件
- 构建与打包
- Go服务通过Makefile统一生成协议、文档、构建二进制;Dockerfile使用多阶段构建,私有仓库代理与凭证注入仅存在于构建阶段,最终镜像不含敏感信息
- Python服务通过requirements.txt安装依赖,镜像内设置时区与运行参数
- 容器镜像与发布
- Dockerfile均基于统一的官方基础镜像,暴露端口与命令行参数由部署清单注入
- Kubernetes部署
- 各服务提供Deployment模板,使用ConfigMap与Secret注入环境变量与认证信息,设置资源请求与限制
- 公共能力
- 认证(JWT)、缓存(Redis)、数据库(GORM/StarRocks StreamLoad)、消息队列(Kafka)、注册中心(Nacos)、可观测性(日志/指标)等
- 基础设施
- CronJob用于定时任务;APISIX作为网关与路由入口
章节来源
- file://bi-analysis/Makefile#L95-L114
- file://bi-api-jushuitan/Makefile#L91-L109
- file://bi-analysis/Dockerfile#L1-L53
- file://bi-api-jushuitan/Dockerfile#L1-L53
- file://bi-basic/Dockerfile#L1-L53
- file://bi-chat/Dockerfile#L1-L38
- file://bi-analysis/k8s/deployment.yaml#L17-L54
- file://bi-api-jushuitan/k8s/deployment.yaml#L17-L56
- file://bi-basic/k8s/deployment.yaml#L17-L51
- file://bi-chat/k8s/deployment.yaml#L18-L55
架构总览
下图展示CI/CD在平台中的位置与交互:开发者提交代码触发流水线,流水线执行代码检查、测试、构建与打包,产出镜像并推送至镜像仓库,随后通过Kubernetes部署到目标环境,并进行健康检查与监控告警。
[本图为概念性总览,无需“图示来源”]
详细组件分析
Git工作流与分支管理策略
- 主分支保护
- master/main分支需通过CI校验方可合并,禁止直接推送,强制PR审查与状态检查
- 关键分支:master(生产)、release/(预发布)、feature/(功能)、hotfix/*(紧急修复)
- 功能分支合并流程
- feature/*从master分叉,完成本地测试后发起PR,要求至少一名reviewer批准
- PR合并前必须通过CI全量检查(代码检查、单元测试、集成测试)
- 合并后自动触发对应模块的构建与部署(按环境策略)
- 版本与标签
- 使用语义化版本与Git Tag标记发布基线,Makefile中通过git描述符生成版本号
章节来源
- file://bi-analysis/Makefile#L3-L3
- file://bi-api-jushuitan/Makefile#L3-L3
代码检查与静态分析
- Go服务
- 使用Makefile统一生成协议与文档,便于静态分析与OpenAPI校验
- 建议在CI中增加golangci-lint、ineffassign、unused等检查项
- Python服务
- 建议在CI中增加flake8/pylint、bandit(安全)、安全依赖扫描
- 前端应用
- 建议在CI中增加ESLint、TypeScript类型检查、依赖漏洞扫描
章节来源
- file://bi-analysis/Makefile#L35-L94
- file://bi-api-jushuitan/Makefile#L34-L89
单元测试与集成测试
- Go服务
- Makefile提供统一构建入口,建议在CI中执行go test ./... 并生成覆盖率报告
- Python服务
- 建议在CI中执行pytest并输出覆盖率
- 集成测试
- 可通过Kubernetes Job或外部测试框架对服务间调用进行端到端验证
章节来源
- file://bi-analysis/Makefile#L95-L98
- file://bi-api-jushuitan/Makefile#L91-L94
构建与打包(Docker)
- 多阶段构建
- 构建阶段安装依赖、下载模块、生成wire代码并编译二进制;最终镜像仅包含运行时所需文件
- 私有仓库访问通过构建参数注入凭证,最终镜像不携带凭证,降低泄露风险
- 端口与命令
- 不同服务暴露不同端口,启动参数通过环境变量注入
- 依赖与代理
- 使用国内镜像源与代理,提升构建稳定性
图示来源
章节来源
- file://bi-analysis/Dockerfile#L9-L28
- file://bi-api-jushuitan/Dockerfile#L9-L28
- file://bi-basic/Dockerfile#L9-L28
- file://bi-chat/Dockerfile#L7-L14
镜像构建与发布流程
- 触发条件
- 推送Tag或合并到受保护分支
- 步骤
- 读取版本信息(Tag/Commit),构建多阶段镜像
- 打标签(latest/版本号/提交哈希),推送到企业镜像仓库
- 记录制品元数据(镜像名、Digest、构建时间、提交信息)
- 安全
- 构建阶段注入凭证,最终镜像不含凭证;启用镜像扫描
章节来源
- file://bi-analysis/Makefile#L3-L3
- file://bi-api-jushuitan/Makefile#L3-L3
- file://bi-analysis/Dockerfile#L14-L18
- file://bi-api-jushuitan/Dockerfile#L14-L18
Kubernetes部署与滚动更新
- 部署清单
- 使用ConfigMap注入部署环境,使用Secret注入认证信息
- 设置资源请求与限制,保证节点调度与QoS
- 滚动更新策略
- 建议使用RollingUpdate(maxUnavailable=0或1,maxSurge=100%),确保零停机
- 结合Readiness/Liveness探针,确保流量切换时机正确
- 网关与路由
- APISIX作为统一入口,结合Service暴露端口,支持灰度与蓝绿
图示来源
- [bi-analysis/k8s/deployment.yaml]
- [bi-api-jushuitan/k8s/deployment.yaml]
- [bi-basic/k8s/deployment.yaml]
- [bi-chat/k8s/deployment.yaml]
章节来源
- file://bi-analysis/k8s/deployment.yaml#L17-L54
- file://bi-api-jushuitan/k8s/deployment.yaml#L17-L56
- file://bi-basic/k8s/deployment.yaml#L17-L51
- file://bi-chat/k8s/deployment.yaml#L18-L55
环境管理与配置管理
- 环境划分
- 开发(dev)、测试(test)、预发布(uat)、生产(prod),每个环境独立命名空间与资源配额
- 配置注入
- 通过ConfigMap注入部署环境与通用配置,通过Secret注入敏感信息(如Nacos认证、第三方密钥)
- 配置中心
- Nacos作为配置中心,服务启动时拉取配置并热更新
章节来源
- file://bi-analysis/k8s/deployment.yaml#L22-L36
- file://bi-api-jushuitan/k8s/deployment.yaml#L22-L36
- file://bi-basic/k8s/deployment.yaml#L22-L36
- file://bi-chat/k8s/deployment.yaml#L27-L46
- file://bi-common/registry/nacos/client.go#L1-L200
发布回滚与应急处理
- 回滚策略
- 通过kubectl rollout undo或指定历史镜像版本回退;建议保留最近3个版本
- 应急处理
- 快速降级:临时关闭高风险功能开关;限流与熔断:利用网关与服务侧熔断
- 一键恢复:准备回滚脚本与配置快照
章节来源
- file://scripts/deploy.sh#L1-L200
- file://scripts/port-forward.sh#L1-L200
监控告警与部署后验证
- 健康检查
- 就绪探针与存活探针,确保流量仅在服务可用时接入
- 指标与日志
- Prometheus抓取指标,Grafana可视化;集中式日志收集与检索
- 验证步骤
- 部署完成后执行一次端到端验证(API网关可达、关键接口返回正常、探针就绪)
章节来源
- file://bi-analysis/k8s/deployment.yaml#L47-L54
- file://bi-api-jushuitan/k8s/deployment.yaml#L47-L56
- file://bi-basic/k8s/deployment.yaml#L45-L51
- file://bi-chat/k8s/deployment.yaml#L47-L55
- file://bi-common/observability/logger/log.go#L1-L200
安全扫描与合规检查
- 镜像安全
- 构建后扫描基础镜像与依赖漏洞,阻断高危漏洞进入生产
- 代码安全
- 依赖扫描(ScaManga/OWASP Dependency-Check)、Secret检测(避免硬编码)
- 合规
- 供应链安全(SBOM)、许可证合规、最小权限原则
章节来源
- file://bi-analysis/Dockerfile#L14-L18
- file://bi-api-jushuitan/Dockerfile#L14-L18
多模块并行构建与依赖管理
- 并行策略
- CI中按模块并行构建,减少总耗时;模块间无强耦合时优先并行
- 依赖管理
- Go使用go.mod/go.sum;Python使用requirements.txt;前端使用package-lock.json/pnpm-lock.yaml
- 统一代理与缓存,提升依赖解析速度
章节来源
- file://bi-analysis/Makefile#L100-L104
- file://bi-api-jushuitan/Makefile#L96-L100
依赖关系分析
公共库与各服务之间的依赖关系如下:
图示来源
- [bi-analysis]
- [bi-api-jushuitan]
- [bi-api-leke]
- [bi-basic]
- [bi-chat]
- [bi-common/registry/nacos/client.go]
- [bi-common/cache/redisx/client.go]
- [bi-common/database/gormx/db.go]
- [bi-common/database/starrocks/streamload/client.go]
- [bi-common/mq/kafkax/consumer.go]
- [bi-common/mq/kafkax/producer.go]
- [bi-common/observability/logger/log.go]
章节来源
- file://bi-analysis/Dockerfile#L1-L53
- file://bi-api-jushuitan/Dockerfile#L1-L53
- file://bi-api-leke/Dockerfile#L1-L53
- file://bi-basic/Dockerfile#L1-L53
- file://bi-chat/Dockerfile#L1-L38
- file://bi-common/registry/nacos/client.go#L1-L200
- file://bi-common/cache/redisx/client.go#L1-L200
- file://bi-common/database/gormx/db.go#L1-L200
- file://bi-common/database/starrocks/streamload/client.go#L1-L200
- file://bi-common/mq/kafkax/consumer.go#L1-L200
- file://bi-common/mq/kafkax/producer.go#L1-L200
- file://bi-common/observability/logger/log.go#L1-L200
性能考虑
- 构建性能
- 使用多阶段构建与缓存层,减少重复下载依赖
- 在CI中复用依赖缓存(Go Mod Cache、pip cache、node_modules缓存)
- 运行性能
- 合理设置CPU/Memory请求与限制,避免资源争抢
- 使用连接池与异步处理,降低延迟
- 网络与存储
- StarRocks StreamLoad与Kafka分区数匹配并发,避免瓶颈
[本节为通用指导,无需“章节来源”]
故障排查指南
- 镜像构建失败
- 检查私有仓库凭证是否正确注入,确认代理与镜像源可用
- Pod无法就绪
- 查看就绪探针日志与返回值,确认端口与健康检查路径
- 配置异常
- 检查ConfigMap/Secret是否正确挂载,Key是否存在
- 数据库/缓存连通性
- 使用端口转发脚本进行快速验证
- 定时任务
- 检查CronJob调度与日志,确认依赖服务可用
章节来源
- file://scripts/deploy.sh#L1-L200
- file://scripts/port-forward.sh#L1-L200
- file://bi-cron/k8s/cronjob.yaml#L1-L200
- file://bi-common/database/gormx/db.go#L1-L200
- file://bi-common/cache/redisx/client.go#L1-L200
- file://bi-common/mq/kafkax/consumer.go#L1-L200
- file://bi-common/mq/kafkax/producer.go#L1-L200
结论
通过标准化的Git工作流、严格的代码与安全检查、多模块并行构建、容器化与Kubernetes编排、完善的配置与监控体系,BI分析平台可以实现高效、可靠、可追溯的持续交付。建议在现有基础上补充CI流水线规范、镜像扫描、依赖审计与合规检查,进一步提升交付质量与安全性。
附录
- 常用工具与配置参考
- 网关配置(APISIX ConfigMap)用于统一路由与限流
- Nacos客户端用于动态配置加载
- 日志与指标组件用于可观测性
- 脚本与辅助
- 部署脚本与端口转发脚本用于联调与排障
章节来源
- file://bi-intra/charts/apisix/templates/apisix-config-cm.yml#L1-L200
- file://bi-common/registry/nacos/client.go#L1-L200
- file://bi-common/observability/logger/log.go#L1-L200
- file://scripts/deploy.sh#L1-L200
- file://scripts/port-forward.sh#L1-L200