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