在星云科技,我们使用 Zadig 实现多环境并行发布,上千次周部署
与 Zadig 结缘
星云科技的核心成员来自贝贝集团,贝贝同样是一家科技型企业,在过去几年的发展中已经形成了一套自己的研发体系,在 Zadig 的发展早期(当时产品还叫 KodeRover),我们就有过接触,不过因为当时机会还不成熟,暂时没有引入。但 Zadig 团队及其产品已经给我们留下了很深的印象,因此当我们在星云科技搭建研发体系时,首先想到的就是结合 Zadig 来构建我们的持续交付系统。
![](https://static001.geekbang.org/infoq/97/9737c29e7ce0b73b3c222bab29f86d81.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
赵文路, 运维 Leader,星云科技
业务发展迅猛、挑战重重
业务初期,采用单体应用 + 前后端分离,通过 Docker 先把业务运行起来,部分业务无法使用 Docker 的,直接采用 jar 包启动的方式,先保证应用正常运行来满足业务诉求。后来增加了 Docker-Compose,初步实现运维代码化工作。
随着业务逐步发展壮大,Docker-Compose + 多虚拟机的方式越来越力不从心,面临诸多挑战:
核心模块逐步拆分为多个服务,每个服务都需要高可用部署,并调控实例数量
涉及到前后端、负载均衡、日志收集、编译部署多个环节、多个服务器,维护环境和编译过程需要耗费非常多的时间和精力
多套测试和预发环境管理成本高,由于配置的差异性、服务数量更多、复杂度也更高,导致运维工作量比生产环境还要多
持续交付痛点分析
有痛点就要解决,我们仔细分析了下各个阶段的痛点和关键需求:
编译构建:从源码编译到制品、镜像,传统方式很难满足异构、多版本的编译构建环境。
部署发布:多环境并行发布,每周有近千次的发布部署。
测试环境:测试环境需要支持多个项目的并行开发,配置方面尽可能统一以降低维护复杂度,但又要保证独立性,满足不同情况的测试验证。
预发环境:预发与生产环境,除了流量入口不同,其它都要与生产环境保持一致,以便进行上线前的回归验证。
研发效率:支持开发工程师自助发布,多种调试方式,使开发成果得到及时反馈,提高研发效率。
技术方案选型思考
我们调研市面上的大部分解决方案, Zadig 作为一款开源分布式持续交付产品,为开发者提供云原生运行环境,支持开发者本地联调、微服务并行构建和部署、集成测试等,具备比较明显的产品特性优势
提高交付效率:经过简单配置,即可自动生成高并发工作流,高效执行构建、部署等任务
轻松应对突发项目任务:一套服务配置,一键快速(10 分钟左右)生成多套隔离的测试环境
版本交付完整信息数据流,让每次发布都有记录可查
对比同类产品,Zadig 产品优势:
能够将源码管理、CI/CD、K8s(或云平台容器服务)、镜像管理、统一账户登录(LDAP)等工具集成于统一平台,完成从代码到上线到维护的全流程操作
有大厂落地经验,有解决复杂场景经验
版本迭代快,通过社区和实时聊天群等多种渠道收集解答问题,并将改进快速迭代至下一版本
相较于其他同类产品,更易上手,配置更简单,维护成本低
值得一提的是 Zadig 团队,也相当给力:
产品团队直接通过运维、研发等真实使用人员了解用户痛点,通过线下线上(微信群、Slack 群)等方式实时沟通实时解答,也方便用户及时了解产品的动向,深入了解产品的设计理念,有助于更好的使用 Zadig 。
使用中遇到问题,能够与产品开发人员直接沟通,问题响应快,解决及时。
产品团队人员对于云原生、微服务、DevOps、CI/CD 等概念都有非常深的理解都是行业内非常资深的专家,且都能在第一线耐心帮助用户,解决问题 -> 收集问题 -> 形成产品功能迭代入下个版本,形成良性循环。
真正的解决用户痛点,解决实际问题:云原生时代持续集成、持续交付、多版本多环境管理、开发测试运维协作问题等。
如何落地 Zadig ?
星云目前的主打产品是 “星云有客。私域一体化智能营销” 解决方案。基于企业微信,打通全渠道数据,精准引流获客,数据化圈层运营,助力企业搭建私域会员营销闭环。
![](https://static001.geekbang.org/infoq/d1/d1e4f5932fce6174101418b5dd794ec0.png)
经过前期技术调研,并与 Zadig 人员多次深入交流,发现不管是产品理念还是团队实力都与我们的预期设想深度契合。而我们的核心产品 “星云有客” 正需要这样一种平台来支撑快速发展的业务,于是接下来便是如何落地的问题。
由于 Zadig 已将源码管理、编译构建环境、运行环境、以及其中个性化的配置都已考虑在内,对于我们来讲只需将原发布配置、发布脚本、环境变量等信息合理的放入 Zadig 各个功能模块即可完成从源码到上线完整流程。
以下是 SaaS 系统的代码构建过程,采用单分支模型:主干开发、主干发布(分支管理相关无缝切换)
![](https://static001.geekbang.org/infoq/06/06c3da486646c3d5f37e80e451888efe.png)
多语言多框架异构系统:我们主要的后端开发框架是 Java Spring Boot,但有些早期系统是 PHP 和 Java 的其它框架,导致构建和运行环境并不完全一致,这也对工具系统提出了更高的要求。
针对此种情况,Zadig 提供灵活的脚本工具,能够适应各种个性化发布。
借助 Zadig 的能力,我们实现了开发自助发布、多项目并行、多测试环境等功能,快速实现了一个高效的持续交付系统,提高了产品功能迭代的效率,优化研发效能。
使用情况总结
当前星云的 SaaS 产品都已完全接入 Zadig,通过 Zadig 管理了两个 K8s 集群,共 5 个环境(3 个测试、1 个预发、1 个生产)共计 200+ 个应用程序,实现了上万次自动化构建和部署,成功率 94% 以上。
![](https://static001.geekbang.org/infoq/2d/2de9578a20743122478ed40871297514.png)
![](https://static001.geekbang.org/infoq/f4/f483eebc9bdc20998e27367ec7bfd33d.png)
过去需要花更多时间关注发布过程,点击发布后,一旦出错需要多次 SSH 至部署机查看原因,而现在无需关注发布详情(可日志回溯),即使发现问题也可以直接使用 Zadig 调试工具快速诊断修复,方便高效。
![](https://static001.geekbang.org/infoq/2a/2a0ea6f89092cb2b562c5c8d54f0a605.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
<基于 Zadig 的多环境管理图示>
Zadig 高效便捷的多环境管理机制,非常适用于我们需要并行开发多项目,对多环境的诉求问题。
未来展望
Zadig 精准的解决了我们非常多的痛点,使研发、运维都能够去关注更多有价值的事情。
Zadig 为当前云原生、微服务技术背景下提供了一套简便、高效的平台工具,相信会在越来越多的企业中得到应用。
版权声明: 本文为 InfoQ 作者【KodeRover】的原创文章。
原文链接:【http://xie.infoq.cn/article/bc43745a2920957c8dd812678】。文章转载请联系作者。
评论