01、Zadig vs. Jenkins:关于时代的选择
最近官方公众号发布了一篇名为 《是时候和 Jenkins 说再见了》的文章,引起了社区的广泛关注和讨论。作为曾经最被广泛使用的持续构建交付工具,Jenkins 的江湖地位似乎被挑战了。评论中有一条被高度点赞顶起:
作为 Zadig 的创造者,我认为有必要与大家分享一份详细的比较文章。我的职业生涯伴随着工具、技术和基础设施的不断迭代,从十几年前的 TeamCity、Hudson,到 Jenkins、Travis、CircleCI 和 Drone,几乎每个产品和工具我个人都在企业环境下管理或者深度使用过,而 Jenkins 是我曾经非常推崇的选择。
回望 Zadig 来时的路,七年前 Zadig 她还是一个构想(Spock - 星际迷航的科学官及大副);五年前,她还是一个环境管理工具;三年前,她已经是一个好用的面向开发者的 CI/CD 平台;而今她在大规模客户的使用下,已然成为企业级一体化的云原生 DevOps 平台,通过广泛链接合作伙伴,为广义的企业开发者(包括产品、开发、测试、SRE、运维等不同职责的同学)提供简单易用的协同平面。
02、产品设计理念
Jenkins 和 Zadig 两种软件交付体系也因此难以被直观地理解,但她和车身制造技术从传统汽车制造工艺向特斯拉倡导的一体化压铸技术非常相似:传统 Jenkins 软件交付就像传统车身制造工艺,需要大量人员组装大量“零部件”插件完成构建、部署、测试、发布的交付过程;Zadig 生来就是一体化软件交付平台,就像使用超大型压铸机一次压铸成型,直接完成交付。在实现原有功能的同时,完成重量减轻、效率提高、成本降低的一次性交付。
不同的时代、不同的定位
Jenkins
Jenkins 是一款开源、可扩展的自动化构建和交付工具。其设计初衷是为了满足不同团队和项目的需求,提供高度可扩展和灵活的平台。通过插件和扩展,Jenkins 赋予开发团队持续集成和交付的能力,帮助实现软件开发的自动化、协作和快速交付。
Zadig/ZadigX
Zadig 是 KodeRover 公司基于 Kubernetes 自主设计和研发的开源、分布式持续交付产品。它拥有灵活易用的高并发工作流、面向开发者的云原生环境、高效协同的测试管理、强大免运维的模板库和客观精确的效能洞察等重要特性,为工程师提供统一的协作平台。Zadig 内置了 K8s YAML、Helm Chart、主机等复杂场景最佳实践,适用于大规模微服务、高频高质量交付等云原生场景。
而 ZadigX 则是 Zadig 的商业版本,包含了开源 Zadig 的全部功能,并提供灵活可扩展的工作流、多种发布策略编排、一键安全审核、AI 效能提升和诊断等特性。同时,ZadigX 支持定制的企业级 XOps 敏捷效能看板,深度集成多种企业级平台,并通过项目模板化批量快速接入,实现数千个服务的一键纳管治理。其主要目标是帮助企业实现产研的数字化转型,让工程师成为创新引擎,并为数字经济的无限价值链接提供支持。
03、功能差异比对表
以下功能差异主要侧重在 Zadig 与 Jenkins 基础能力的核心差异,部分功能在 ZadigX 中支持
04、核心能力差异详情
1、多服务并行构建部署
Jenkins
Jenkins 诞生于微服务流行之前,所以它在支持微服务方面差强人意。特别是在拥有大量微服务时的可观察性和监控方面,每个微服务都有自己的管道流程。由于不支持一次集成和测试多个服务,Jenkins 缺乏微服务应用程序的基本功能。他的主要实现方式是通过 Groovy 语言编写 Jenkinsfile,通过<parallel>来完成多个服务的并发构建部署,不同的服务组合场景可能需要修改工作流配置,或创建新的工作流来实现,这会导致工作流数量增多,增加管理成本。
Zadig
诞生于大规模应用爆发阶段,对 Kubernetes 环境更具备适应性,原生支持微服务的并发构建、部署、测试,在执行工作流任务时可以根据实际需求任意选择服务组合及其对应的代码信息进行更新,可自由选择<Branch>、<PR/MR>、<Branch+PR/MR>、<Tag>方式进行构建。
字节跳动飞书的 SRE Tech Leader 曾在《字节跳动飞书为什么选择 Zadig 实现主干开发、主干发布》一文中提到:“ 我们深度认同 Zadig 的设计理念,并且认为 Zadig 真正意义上解决了微服务集成测试的痛点。Zadig 毫无疑问是业界优秀的 CI/CD 产品,它也是真正理解微服务、重视微服务、解决微服务痛点的产品。”
2、环境管理及运行时服务可视化
Jenkins
Jenkins 作为传统 CI 工具的典型代表,主要专注于持续集成的能力,并不直接提供环境管理功能。然而,在实际的产品生产和交付过程中,除了 CI 能力外,还需要搭建 CD 相关的能力。这个过程需要耗费额外的人力去维护。
Zadig
Zadig 除了基本的工作流能力外,还支持环境管理以及运行时服务可视化。Zadig 支持分钟级创建或复制一套完整的隔离环境,以应对频繁的业务变更和产品迭代。基于全量基准环境,快速为开发者提供一套独立的自测环境。一键托管集群资源即可轻松调试已有服务,验证业务代码。通过环境可以获取与服务相关的各种信息,例如服务版本、日志和网络等等,以帮助进行问题诊断和团队成员之间的日常沟通和协作。
iMile 运维团队在《iMile 利用 Zadig 多云环境周部署千次,跨云跨地域持续交付全球业务》文章中说道:“Zadig 通过工作流整体串联了 K8s 的各个组件,也串联起了我们整个研发团队,极大地减轻了脚本的维护、环境治理的成本,同时上手也非常简单高效。在项目迭代和交付中起到了极大的帮助作用,节约了大量的时间成本,让专业的人做‘专业’的事儿,让项目研发高效并行,减少团队间的沟通 Gap,给我们的研发交付帮助极大。总结就是‘简单,高效’!”
3、权限管理与协作模式
Jenkins
Jenkins 可以通过插件实现权限的管控,该插件控制 Job 权限的方式是将用户和角色平铺成一张表格,通过勾选的方式来配置用户权限。在用户数量或 Job 数量不断增多的情况下表格会变得异常复杂,难以维护。
Zadig
在 Zadig 协作模式中通过简单配置,可以支持对项目中指定工作流和环境资源做权限控制。
4、安全可靠的生产环境发布
为了确保新版本的安全发布,通常需要利用自动化能力,在发布流程中根据实际情况编排灰度发布策略、进行资源观测,并进行人工确认。
Jenkins
在 Jenkins 上需要通过对每个服务编写灰度发布脚本的方式,再结合一系列的插件来完成整个发布过程,然而这种配置相对繁琐,且维护成本较高。
下图以单个服务的金丝雀发布过程为例子,实际发布过程可能会涉及到多个服务,需要考虑金丝雀过程中使用的 YAML 的管理问题。
Zadig
ZadigX 的发布工作流支持系统内审批、飞书审批流、钉钉审批流,除此之外,支持对接外部系统进行合规审批。工作流内置编排蓝绿、金丝雀、分批次灰度、istio 等发布策略,通过界面即可完成配置过程,简单易操作,发布执行过程透明可靠。
5、产研效能洞察及 AI 诊断分析
Jenkins
Jenkins 工作流步骤都通过脚本的方式来实现,本身不具备业务属性,因此以一个完整的业务单元来统计和分析研发过程、测试过程、发布过程的效能情况难以实现。
Zadig
Zadig 具有工程化的项目协同能力,提供全生命周期的效能数据,帮助分析各个环境的变化过程以及效能短板。ZadigX 为企业管理者提供更多的决策依据,可以通过 ZadigX 自定义效能指标,添加进度项:平均需求交付周期、需求研发交付周期。企业可以定制 XOps 敏捷效能看板,通过项目评分比对快速识别短板,制定适合企业现状的效能目标,用数据驱动持续改进。同时近期也将公开基于 LLM 打造的 AI 企业效能分析模块。
05、其他亮点功能介绍
1、现有项目支持从 Jenkins 平滑过渡
对于现有大量的服务,可以通过托管项目零侵入快速将现有 K8s 集群接入到 Zadig,并且提供了可满足开发人员日常使用的可视化 K8s 管理功能。通过切换为 K8s YAML 项目实现服务 YAML 的全生命周期管理。
除此之外,为了降低那些已经在使用 Jenkins 作为 CI 工具的项目迁移到 Zadig 的成本,Zadig 工作流还兼容支持接入多个 Jenkins 构建。前锅圈 DevOps 工程师曾在《锅圈如何利用 Zadig 从容落地运维容器化建设》一文中提到采用混合方案,快速实现从传统发布方式到容器化发布方式的转变。
2、模板库助力运维规范化治理
Zadig 支持 Dockerfile 模板、K8s YAML 模板、Helm Chart 模版、构建模板、工作流模板,企业根据实际情况抽象出几套服务和构建模板,基于模板可快速新建数百上千的微服务,降低运维新服务接入的复杂度和后续的管理成本。路特斯 DevOps 工程师楚乔在《路特斯如何使用 Zadig 实现混合云全球交付》一文中说道:“模板功能是 Zadig 进阶功能中最强大的,毫不夸张地说,活用模板可以为运维降低 90%以上的事务性工作!目前我们已经可以实现只需维护一套 K8S YAML 模板、一套 DOCKERFILE 模板、一套构建模板便可以满足 95% 的后端项目需求,运维接入一个服务只需要 2 分钟。”
3、安全扫描编排到产品全生命周期
Zadig 支持编排 Coverity、SonarQube、CleanSource (清源) SCA、 DongTai 等安全工具和服务到整个交付链路中,通过强大的运行时环境和自定义工作流能力,为产研团队提供有力的安全支撑。
4、广泛集成内外系统服务于开发者
每家企业都面临着现存系统、技术债和工具链等挑战,这导致了研发过程的碎片化,影响了效率和团队的协作。Zadig 以“平台工程”思路为指导,将碎片化的建设统一起来,依托云原生技术支撑产研交付的关键流程,实现了“一个平台,一键上线”的理念。Zadig 深度集成了项目管理平台 Jira/飞书 Meego、代码管理平台 GitHub/GitLab/Gitee/CodeUp、配置管理工具 Nacos/Apollo,以及数据变更工具 DMS/Flyway/Mysql,从而将产品研发管理由碎片化跃迁为平台化。团队可以自动化高效协同,业务稳定迭代,确保研发过程的顺利进行。
5、测试管理帮助团队打造质量工程
Zadig 测试管理模块支持对接 Jmeter、Pytest 等主流测试框架,给测试人员一个平面,沉淀和管理 UI、API、E2E 测试用例资产。通过工作流,向研发提供前置测试验证能力。通过持续测试和质量分析,充分释放测试价值。
06、关于产品的总结
在上述比对中,我详细对比了 Zadig 和 Jenkins 的设计理念、功能差异以及 Zadig 的特有亮点。它们都旨在为开发人员提供轻松构建和自动化工具,以提高工作效率并释放创造力。然而,随着时代的发展,技术不断进步,新工具不断涌现,Jenkins 曾经是一个很好的选择,但现在可能需要更适应时代的工具。
在选择工具时,企业需要综合考虑需求和团队情况,包括组织规模、业务复杂度和开发者体验等因素,以选择最适合的工具来支持团队的发展和项目的成功。在拥有一定规模微服务(20 个以上)和基于 K8s 容器交付场景时,Zadig 在持续交付、多服务并行部署、运行时环境治理和多服务编排等方面表现出强大的优势,能够支持中型和大型团队的成功交付和项目稳定迭代发展。需要注意的是,在非云原生场景下,Jenkins 依然表现优异,而云原生 CI/CD 工具如 GitLab CI、CircleCI、Argo 和 Tekton 等与 Zadig 也并不冲突,Zadig 可以和它们结合起来,实现统一的开发协同平台,更好的服务于开发者。
07、Zadig 现状和未来展望
Zadig 作为一款年轻的开源工具,在过去的 2 年多时间里随着社区的发展不断得到完善和成长,已成为数千个企业和众多工程师的得力助手。我们团队非常重视来自社区广泛用户的反馈,特别关注开发者体验。为确保用户获得更加顺畅和便捷的使用体验,我们将持续优化产品的交互体验和主要功能路径。随着客户规模的不断扩大,我们将致力于为更多场景提供交付支持和增强能力。
在扩展性方面,我们将进一步增强工作流自定义任务的能力,让用户可以根据自身需求灵活定制工作流程。同时,我们也会提供更多的开发者 OpenAPI,以满足外部系统调用的需求,帮助用户更好地整合和使用 Zadig 产品。
我们团队将持续投入精力,不断改进产品,以满足不断增长的用户需求。我们的目标是为开发者们带来更好的交付体验和平台支持。我们致力于让 Zadig 成为企业在持续交付和开发过程中不可或缺的伙伴,共同推动产研的不断创新和进步。