Skip to content

CI/CD流水线

**本文引用的文件** - [[[[[bi-analysis/Dockerfile]]]]](../file/bi-analysis/dockerfile) - [[[[[bi-analysis/Makefile]]]]](../file/bi-analysis/makefile) - [[[[[bi-basic/Dockerfile]]]]](../file/bi-basic/dockerfile) - [[[[[bi-basic/Makefile]]]]](../file/bi-basic/makefile) - [[[[[scripts/deploy.sh]]]]](../file/scripts/deploy.sh) - [[[[[bi-chat/Dockerfile]]]]](../file/bi-chat/dockerfile) - [[[[[bi-chat/docker-compose.yml]]]]](../file/bi-chat/docker-compose.yml) - [[[[[bi-chat-asktable/Dockerfile]]]]](../file/bi-chat-asktable/dockerfile) - [[[[[bi-api-jushuitan/Dockerfile]]]]](../file/bi-api-jushuitan/dockerfile) - [[[[[bi-api-leke/Dockerfile]]]]](../file/bi-api-leke/dockerfile) - [[[[[bi-cron/Dockerfile]]]]](../file/bi-cron/dockerfile) - [[[[[bi-notify/Dockerfile]]]]](../file/bi-notify/dockerfile) - [[[[[bi-plan-taoxi/Dockerfile]]]]](../file/bi-plan-taoxi/dockerfile) - [[[[[bi-sys/Dockerfile]]]]](../file/bi-sys/dockerfile) - [[[[[bi-template/Dockerfile]]]]](../file/bi-template/dockerfile) - [[[[[bi-tenant/Dockerfile]]]]](../file/bi-tenant/dockerfile) - [[[[[mcp-server-starrocks/Dockerfile]]]]](../file/mcp-server-starrocks/dockerfile) - [[[[[ui-web/Dockerfile]]]]](../file/ui-web/dockerfile) - [[[[[ui-web-admin/Dockerfile]]]]](../file/ui-web-admin/dockerfile) - [[[[[ui-crx/Dockerfile]]]]](../file/ui-crx/dockerfile) - [[[[[bi-infra/README.md]]]]](../file/bi-intra/readme.md) - [[[[[bi-infra/apisix/apisix-manager.sh]]]]](../file/bi-intra/apisix/apisix-manager.sh) - [[[[[bi-infra/apisix/create-op-bi-sys.sh]]]]](../file/bi-intra/apisix/create-op-bi-sys.sh) - [[[[[bi-infra/charts/grafana/deploy.sh]]]]](../file/bi-infra/charts/grafana/deploy.sh) - [[[[[bi-infra/charts/grafana/deploy-dashboards.sh]]]]](../file/bi-infra/charts/grafana/deploy-dashboards.sh) - [[[[[bi-basic/internal/tests/read_kafka_test.sh]]]]](../file/bi-basic/internal/tests/read-kafka-test.sh) - [[[[[bi-basic/internal/tests/send_kafka_test.sh]]]]](../file/bi-basic/internal/tests/send-kafka-test.sh) - [[[[[bi-notify/scripts/create_kafka_topics.sh]]]]](../file/bi-notify/scripts/create-kafka-topics.sh) - [[[[[bi-notify/scripts/kafka-port-forward.sh]]]]](../file/bi-notify/scripts/kafka-port-forward.sh) - [[[[[bi-infra/scripts/publish-services.sh]]]]](../file/bi-infra/scripts/publish-services.sh) - [[[[[bi-infra/apisix/services.yaml]]]]](../file/bi-intra/apisix/services.yaml) - [[[[[bi-infra/apisix/apisix-gateway-lb-test.yaml]]]]](../file/bi-intra/apisix/apisix-gateway-lb-test.yaml) - [[[[[bi-infra/apisix/apisix-gateway-lb-test-svc.yaml]]]]](../file/bi-intra/apisix/apisix-gateway-lb-test-svc.yaml) - [[[[[bi-infra/apisix/apisix-gateway-lb-test-endpoints.yaml]]]]](../file/bi-intra/apisix/apisix-gateway-lb-test-endpoints.yaml) - [[[[[bi-infra/apisix/apisix-prometheus-global-rule.json]]]]](../file/bi-intra/apisix/apisix-prometheus-global-rule.json) - [[[[[bi-infra/charts/nacos/README.md]]]]](../file/bi-infra/charts/nacos/readme.md) - [[[[[bi-infra/charts/kafka/README.md]]]]](../file/bi-infra/charts/kafka/readme.md) - [[[[[bi-infra/charts/grafana/README.md]]]]](../file/bi-infra/charts/grafana/readme.md) - [[[[[bi-infra/charts/apisix/README.md]]]]](../file/bi-infra/charts/apisix/readme.md)

目录

  1. 引言
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考量
  8. 故障排除指南
  9. 结论
  10. 附录

引言

本文件面向BI分析平台的CI/CD流水线,系统化梳理自动化构建、测试与部署流程,覆盖代码检查、单元测试、集成测试、性能测试、Docker镜像构建与推送、Kubernetes自动化部署脚本、GitOps与声明式基础设施、代码质量门禁、安全扫描与合规检查、回滚机制与紧急修复流程,以及多环境(开发、测试、预生产、生产)管理策略与最佳实践。

项目结构

仓库采用多模块Go微服务与前端工程并存的组织方式,各子项目均具备独立的Dockerfile与Makefile,便于标准化构建与发布;同时提供脚本化的本地部署与基础设施管理工具,支撑从开发到生产的全链路交付。

图示来源

章节来源

核心组件

  • 多项目Dockerfile:统一基于私有镜像仓库的基础镜像,分阶段构建,避免凭证泄露至最终镜像,支持多项目复用。
  • Makefile构建规范:集中管理协议生成、Wire依赖注入、OpenAPI文档生成与同步、版本标记等。
  • 自动化部署脚本:封装拉取代码、前端/后端构建、Docker镜像构建与Compose编排启动的完整流程。
  • 基础设施脚本:提供网关、监控、注册中心、消息队列等组件的部署与管理脚本。
  • 测试脚本:涵盖Kafka读写测试与端口转发,支撑集成测试与联调验证。

章节来源

架构总览

下图展示从代码提交到Kubernetes部署的关键路径,包括代码检查、构建、测试、镜像构建与推送、以及Kubernetes部署与GitOps声明式管理。

图示来源

详细组件分析

代码检查与质量门禁

  • 代码风格与静态检查:建议在CI中集成golangci-lint、misspell、typos等工具,确保提交前通过基础质量门禁。
  • 单元测试覆盖率:要求每个包至少达到阈值(如80%),失败则阻断合并。
  • 协议与OpenAPI一致性:通过Makefile中的协议生成与OpenAPI导出流程,确保接口契约稳定。
  • 合规与依赖审计:对第三方依赖进行许可证扫描与漏洞扫描,结合SBOM输出。

章节来源

单元测试与集成测试

  • 单元测试:利用Go标准库测试框架,按模块编写单元测试,确保核心逻辑正确性。
  • 集成测试:通过Kafka读写脚本与端口转发脚本,验证消息收发与服务间通信。
  • E2E测试:在bi-basic的e2e目录中提供端到端测试样例,建议纳入CI流水线。

图示来源

章节来源

性能测试与基准

  • 建议在CI中引入压力测试与基准测试(如go test -bench),针对关键查询与数据处理路径设置基线。
  • 将性能指标(P95/P99延迟、吞吐量、资源占用)纳入质量门禁,异常即阻断。

章节来源

Docker镜像自动构建与推送

  • 构建阶段:统一使用多阶段Dockerfile,下载依赖、编译二进制,最终仅拷贝必要文件到精简基础镜像。
  • 凭证管理:在构建阶段配置机密信息,避免泄露至最终镜像。
  • 版本标签:基于Git Tag或Commit ID生成镜像标签,确保可追溯。
  • 推送策略:在CI中完成镜像构建与推送,结合镜像仓库的扫描与签名策略。

图示来源

章节来源

Kubernetes自动化部署脚本

  • 本地一键部署:提供部署脚本,自动拉取代码、构建前端/后端、构建Docker镜像并使用Compose启动。
  • 生产部署:建议以Helm/Argo CD/Kustomize等GitOps工具管理Kubernetes资源,确保声明式与可追溯。

图示来源

章节来源

GitOps工作流与声明式基础设施

  • 声明式配置:通过Helm Charts、Kustomize或Argo CD管理Kubernetes资源,确保环境一致性。
  • 基础设施即代码:网关、监控、注册中心、消息队列等通过脚本与配置文件管理,纳入版本控制。
  • 变更审批:通过Pull Request与自动化检查,确保变更受控与可审计。

章节来源

多环境部署策略

  • 开发环境:快速迭代,允许频繁变更与实验性功能。
  • 测试环境:与生产网络隔离,执行完整的回归与集成测试。
  • 预生产环境:尽可能接近生产配置,进行容量与性能验证。
  • 生产环境:严格准入控制,启用蓝绿/金丝雀发布,配合健康检查与自动回滚。

章节来源

回滚机制与紧急修复

  • 快速回滚:记录镜像Tag与Kubernetes配置版本,支持一键回滚至上一个稳定版本。
  • 紧急修复:通过热修复分支与小步快跑策略,最小化影响范围。
  • 降级预案:在网关层对非关键服务进行熔断与降级,保障核心链路可用。

章节来源

依赖关系分析

图示来源

章节来源

性能考量

  • 构建优化:多阶段构建减少镜像体积,缓存Go模块与依赖以缩短构建时间。
  • 运行时优化:启用GZIP压缩、连接池复用、异步处理与限流熔断,降低延迟与资源消耗。
  • 监控与告警:结合Prometheus/Grafana与APISIX指标,建立端到端可观测性。

章节来源

故障排除指南

  • 构建失败排查:检查Dockerfile中的凭证配置、Go模块代理与网络访问权限。
  • 镜像推送问题:确认镜像仓库凭据与网络连通性,检查镜像标签格式。
  • 部署异常:核对Kubernetes资源配置、服务发现与端口映射,查看Pod事件与日志。
  • 网关与监控:使用APISIX管理脚本与Grafana部署脚本验证网关路由与监控面板。
  • Kafka联调:通过Kafka读写脚本与端口转发脚本定位消息收发问题。

章节来源

结论

本CI/CD方案以标准化的Dockerfile与Makefile为基础,结合脚本化的部署流程与GitOps声明式管理,形成从代码到生产的闭环。建议在现有基础上补充自动化测试、质量门禁与安全扫描,并完善多环境治理与回滚机制,持续提升交付效率与稳定性。

附录

  • 建议的CI流水线步骤清单
    • 代码检查(golangci-lint、misspell、typos)
    • 单元测试(含覆盖率)
    • 集成测试(Kafka读写、端口转发)
    • 性能测试(基准与压力)
    • Docker镜像构建与推送
    • Kubernetes部署(Helm/Argo CD)
    • 声明式基础设施校验
    • 安全扫描与合规检查
    • 回滚与紧急修复演练