在星云科技,我们使用 Zadig 实现多环境并行发布,上千次周部署

语言: CN / TW / HK

Zadig on Github

Zadig on Gitee

与 Zadig 结缘

星云科技的核心成员来自贝贝集团,贝贝同样是一家科技型企业,在过去几年的发展中已经形成了一套自己的研发体系,在 Zadig 的发展早期(当时产品还叫 KodeRover),我们就有过接触,不过因为当时机会还不成熟,暂时没有引入。但 Zadig 团队及其产品已经给我们留下了很深的印象,因此当我们在星云科技搭建研发体系时,首先想到的就是结合 Zadig 来构建我们的持续交付系统。

赵文路, 维 Leader,科技

 

 

业务发展迅猛、挑战重重

业务初期,采用单体应用 + 前后端分离,通过 Docker 先把业务运行起来,部分业务无法使用 Docker 的,直接采用 jar 包启动的方式,先保证应用正常运行来满足业务诉求。后来增加了 Docker-Compose,初步实现运维代码化工作。
 
随着业务逐步发展壮大,Docker-Compose + 多虚拟机的方式越来越力不从心,面临诸多挑战:
  1. 核心模块逐步拆分为多个服务,每个服务都需要高可用部署,并调控实例数量
  2. 涉及到前后端、负载均衡、日志收集、编译部署多个环节、多个服务器,维护环境和编译过程需要耗费非常多的时间和精力
  3. 多套测试和预发环境管理成本高,由于配置的差异性、服务数量更多、复杂度也更高,导致运维工作量比生产环境还要多
 

持续交付痛点分析

有痛点就要解决,我们仔细分析了下各个阶段的痛点和关键需求:
  1. 编译构建:从源码编译到制品、镜像,传统方式很难满足异构、多版本的编译构建环境。
  2. 部署发布:多环境并行发布,每周有近千次的发布部署。
  3. 测试环境:测试环境需要支持多个项目的并行开发,配置方面尽可能统一以降低维护复杂度,但又要保证独立性,满足不同情况的测试验证。
  4. 预发环境:预发与生产环境,除了流量入口不同,其它都要与生产环境保持一致,以便进行上线前的回归验证。
  5. 研发效率:支持开发工程师自助发布,多种调试方式,使开发成果得到及时反馈,提高研发效率。
 

技术方案选型思考

我们调研市面上的大部分解决方案, Zadig 作为一款开源分布式持续交付产品,为开发者提供云原生运行环境,支持开发者本地联调、微服务并行构建和部署、集成测试等,具备比较明显的产品特性优势
  1. 提高交付效率:经过简单配置,即可自动生成高并发工作流,高效执行构建、部署等任务
  2. 轻松应对突发项目任务:一套服务配置,一键快速(10 分钟左右)生成多套隔离的测试环境
  3. 版本交付完整信息数据流,让每次发布都有记录可查
 
对比同类产品,Zadig 产品优势:
  1. 能够将源码管理、CI/CD、K8s(或云平台容器服务)、镜像管理、统一账户登录(LDAP)等工具集成于统一平台,完成从代码到上线到维护的全流程操作
  2. 有大厂落地经验,有解决复杂场景经验
  3. 版本迭代快,通过社区和实时聊天群等多种渠道收集解答问题,并将改进快速迭代至下一版本
  4. 相较于其他同类产品,更易上手,配置更简单,维护成本低
 
值得一提的是 Zadig 团队,也相当给力:
  1. 产品团队直接通过运维、研发等真实使用人员了解用户痛点,通过线下线上(微信群、Slack 群)等方式实时沟通实时解答,也方便用户及时了解产品的动向,深入了解产品的设计理念,有助于更好的使用 Zadig 。
  2. 使用中遇到问题,能够与产品开发人员直接沟通,问题响应快,解决及时。
  3. 产品团队人员对于云原生、微服务、DevOps、CI/CD 等概念都有非常深的理解都是行业内非常资深的专家,且都能在第一线耐心帮助用户,解决问题 -> 收集问题 -> 形成产品功能迭代入下个版本,形成良性循环。
  4. 真正的解决用户痛点,解决实际问题:云原生时代持续集成、持续交付、多版本多环境管理、开发测试运维协作问题等。

如何落地 Zadig ?

星云目前的主打产品是“星云有客.私域一体化智能营销”解决方案。基于企业微信,打通全渠道数据,精准引流获客,数据化圈层运营,助力企业搭建私域会员营销闭环。
 
经过前期技术调研,并与 Zadig 人员多次深入交流,发现不管是产品理念还是团队实力都与我们的预期设想深度契合。而我们的核心产品“星云有客”正需要这样一种平台来支撑快速发展的业务,于是接下来便是如何落地的问题。
由于 Zadig 已将源码管理、编译构建环境、运行环境、以及其中个性化的配置都已考虑在内,对于我们来讲只需将原发布配置、发布脚本、环境变量等信息合理的放入 Zadig 各个功能模块即可完成从源码到上线完整流程。
 
以下是 SaaS 系统的代码构建过程,采用单分支模型:主干开发、主干发布(分支管理相关无缝切换)
 
多语言多框架异构系统:我们主要的后端开发框架是 Java Spring Boot,但有些早期系统是 PHP 和 Java 的其它框架,导致构建和运行环境并不完全一致,这也对工具系统提出了更高的要求。
针对此种情况,Zadig 提供灵活的脚本工具,能够适应各种个性化发布。
 
借助 Zadig 的能力,我们实现了开发自助发布、多项目并行、多测试环境等功能,快速实现了一个高效的持续交付系统,提高了产品功能迭代的效率,优化研发效能。
 

使用情况总结

当前星云的 SaaS 产品都已完全接入 Zadig,通过 Zadig 管理了两个 K8s 集群,共 5 个环境(3 个测试、1 个预发、1 个生产)共计 200+ 个应用程序,实现了上万次自动化构建和部署,成功率 94% 以上。
 
 
 
过去需要花更多时间关注发布过程,点击发布后,一旦出错需要多次 SSH 至部署机查看原因,而现在无需关注发布详情(可日志回溯),即使发现问题也可以直接使用 Zadig 调试工具快速诊断修复,方便高效。
 
 
<基于 Zadig 的多环境管理图示>
 
Zadig 高效便捷的多环境管理机制,非常适用于我们需要并行开发多项目,对多环境的诉求问题。

未来展望

Zadig 精准的解决了我们非常多的痛点,使研发、运维都能够去关注更多有价值的事情。
Zadig 为当前云原生、微服务技术背景下提供了一套简便、高效的平台工具,相信会在越来越多的企业中得到应用。