Zadig vs. Jenkins 详细比较
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 成为企业在持续交付和开发过程中不可或缺的伙伴,共同推动产研的不断创新和进步。
相关文章:

Zadig vs. Jenkins 详细比较
01、Zadig vs. Jenkins:关于时代的选择 最近官方公众号发布了一篇名为 《是时候和 Jenkins 说再见了》的文章,引起了社区的广泛关注和讨论。作为曾经最被广泛使用的持续构建交付工具,Jenkins 的江湖地位似乎被挑战了。评论中有一条被高度点赞…...

航拍无人机像素坐标转世界坐标
一、背景 已知相机参数(传感器宽度和高度、图像宽度和高度、焦距、相对航高、像主点坐标 ),在给定像素坐标的前提下,求世界坐标,大部分通过AI来实现,不知道哪个步骤有问题,望大家指正 二、代码…...

Linux系统学习——指令二
Linux系统学习——指令二 sed 指令perl 指令rpm 指令rz 和 sz 指令查看文件大小及压缩文件指令使用tar命令:使用zip命令:注意事项: 解压文件指令 sed 指令 使用sed命令:sed -i s/旧内容/新内容/g 文件名,这将会在文件…...

【逻辑回归】和【线性回归】的区别和联系-九五小庞
逻辑回归(Logistic Regression)和线性回归(Linear Regression)是两种常用的统计学习和机器学习技术,它们各自具有特定的应用场景和优势。以下是它们之间的主要区别和联系: 定义与目的 线性回归:…...

富格林:正视欺诈阻挠交易被骗
富格林指出,在交易的过程中,投资者们就算做了十分的把握,也难免会出现亏损。因此建议新手投资者,在准备投资时一定要做好充分的准备工作,明辨欺诈陷阱,同时学习正规的做单盈利技巧,这才能帮助我…...

如何在WPS中加载EndNote X9插件
如何在WPS中加载EndNote X9插件 步骤1:关闭WPS 确保所有WPS文档和窗口都已关闭。 步骤2:修改文件后缀 打开文件资源管理器,导航到路径:C:\Program Files (x86)\EndNote X9\Product-Support\CWYW。找到文件 Cwyw_X86.dat&#…...

vb.net小demo(计算器、文件处理等/C#也可看)
Demo1:使用窗体控件实现一个简易版计算器 Public Class Form1Private Sub Button_1_Click(sender As Object, e As EventArgs) Handles Button_1.ClickCalSubBox.Text Button_1.TextEnd SubPrivate Sub Button_2_Click(sender As Object, e As EventArgs) Handles …...

【vue3|第8期】深入理解Vue 3 computed计算属性
日期:2024年6月10日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方…...

《精通ChatGPT:从入门到大师的Prompt指南》附录C:专业术语表
附录C:专业术语表 本附录旨在为读者提供一本全面的术语表,帮助理解《精通ChatGPT:从入门到大师的Prompt指南》中涉及的各种专业术语。无论是初学者还是高级用户,这些术语的定义和解释将为您在使用ChatGPT时提供重要参考。 A AI&…...

YOLOv8可视化界面PYQT5
yolov8,可视化界面pyqt。支持图片检测,视频检测,摄像头检测等,实时显示检测画面。支持自定义数据集,计数,fps展示……,即插即用,无需更改太多代码...

远程代码执行和远程命令执行是一个东西吗
远程代码执行(Remote Code Execution,简称RCE)和远程命令执行在概念上有所区别,但两者都涉及到攻击者通过远程方式在目标系统上执行代码或命令。以下是两者的详细比较: 定义: 远程代码执行(RCE…...

C++ 20新特性之线程与jthread
💡 如果想阅读最新的文章,或者有技术问题需要交流和沟通,可搜索并关注微信公众号“希望睿智”。 为什么要引入jthread 在C 11中,已经引入了std::thread。std::thread为C标准库带来了一流的线程支持,极大地促进了多线程…...

赶紧收藏!2024 年最常见 20道并发编程面试题(七)
上一篇地址:赶紧收藏!2024 年最常见 20道并发编程面试题(六)-CSDN博客 十三、什么是线程局部存储(Thread-Local Storage)? 线程局部存储(Thread-Local Storage,简称TLS…...

HAL库开发--第一盏灯
知不足而奋进 望远山而前行 目录 文章目录 前言 学习目标 学习内容 需求 开发流程 项目创建 芯片配置 功能配置 时钟配置 项目配置 编写代码 编译测试 烧录失败解决 编辑 总结 前言 在嵌入式系统开发中,掌握HAL库开发流程、STMCubeMX配置过程以及…...

Linux C语言:变量的作用域和生命周期(auto、register、static和extern)
一、变量存储类型-auto 1、auto变量的说明 变量在程序中使用时,必须预先说明它们的存储类型和数据类型。 变量说明的一般形式是: <存储类型> <数据类型 > <变量名> ; <存储类型>是关键词auto、register、static和extern<…...

AI Stable diffusion 报错:稳定扩散模型加载失败,退出
可能是内存不够,看看你最近是加了新的大的模型,可以把你的stable-diffusion-webui\models\Stable-diffusion目录下的某个ckpt删除掉,可能ckpt太大,无法加载成功; Stable diffusion model failed to load, exiting 如图…...

[Python学习篇] Python循环语句
while 循环 语法: while 条件: 条件成立后会重复执行的代码 ...... 示例1:死循环 # 这是一个死循环示例 while True:print("我正在重复执行")示例2:循环指定次数 i 1 while i < 5:print(f"执行次数 {i}")…...

MongoDB 正则表达式
MongoDB 正则表达式 MongoDB 是一个流行的 NoSQL 数据库,它提供了强大的查询功能,包括对正则表达式的支持。正则表达式是一种强大的文本搜索工具,它允许用户根据特定的模式匹配和搜索字符串。在 MongoDB 中,正则表达式可以用于查…...

Django配置连接池:使用django-db-connection-pool配置连接池
一、该三方库文档使用 github地址: https://github.com/altairbow/django-db-connection-pool/blob/1.2.5/README_CN.mdhttps://github.com/altairbow/django-db-connection-pool/blob/1.2.5/README_CN.md1、选择指定版本,查看指定版本的文档和配置&am…...

SpringBoot整合钉钉实现消息推送
前言 钉钉作为一款企业级通讯工具,具有广泛的应用场景,包括但不限于团队协作、任务提醒、工作汇报等。 通过Spring Boot应用程序整合钉钉实现消息推送,我们可以实现以下功能: 实时向指定用户或群组发送消息通知。自定义消息内容…...

【机器学习】集成学习方法:Bagging与Boosting的应用与优势
🔥 个人主页:空白诗 文章目录 引言一、集成学习的定义二、Bagging方法1. 随机森林(Random Forest)2. 其他Bagging方法 二、Boosting方法1. 梯度提升树(Gradient Boosting Machine, GBM)解释GBM的基本原理和…...

工业 web4.0 的 UI 卓越非凡
工业 web4.0 的 UI 卓越非凡...

C语言 | Leetcode C语言题解之第145题二叉树的后序遍历
题目: 题解: void addPath(int *vec, int *vecSize, struct TreeNode *node) {int count 0;while (node ! NULL) {count;vec[(*vecSize)] node->val;node node->right;}for (int i (*vecSize) - count, j (*vecSize) - 1; i < j; i, --j)…...

如何在 Vue 3 中使用 vue3-print-nb 实现灵活的前端打印
你好,我是小白Coding日志,一个热爱技术的程序员。在这里,我分享自己在编程和技术世界中的学习心得和体会。希望我的文章能够给你带来一些灵感和帮助。欢迎来到我的博客,一起在技术的世界里探索前行吧! 前言 在前端开…...

Go Module详解
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…...

基于51单片机的智能水表
一.硬件方案 本设计主要以51单片机作为主控处理器的智能水表,该水表能够记录总的用水量和单次用水量,当用水量超出设定值时系统发出声光报警提醒,水量报警值能够通过按键进行自行设置,并且存储于AT24C02中,并且可以测…...

SQLServer 借助Navcate做定时备份的脚本
首先创建SQLServer链接,然后在Query标签种创建一个查询 查询内容如下 use ChengYuMES declare ls_time varchar(1000) declare ls_dbname varchar(1000) set ls_time convert(varchar, getdate(), 112) _ replace(convert(varchar, getdate(), 108), :, )-- 需…...

MBD_入门篇_21_SimulinkSignalAttributes
21.SignalAttributes 21.1 概述 Signal Attributes,信号属性,信号特性。 21.2 回顾常用模块 21.2.1 DataTypeConversion 数据类型转换模块,可以对信号的数据类型进行强制转换。无符号数据与有符号数据相加,我们可以将无符号数据转…...

Web前端高级课程:深入探索与技能飞跃
Web前端高级课程:深入探索与技能飞跃 在数字化时代的浪潮中,Web前端技术日新月异,对前端开发者的技能要求也日益提高。为了满足这一需求,我们精心打造了一款Web前端高级课程,旨在帮助学员掌握最前沿的前端技术&#x…...

螺丝工厂vtk ThreadFactory(1)
螺丝工厂vtkThreadFactory (1) 缘起 几年前的探索在Python里应用Openscad实现3D建模之3D螺纹建模初探3 新的参考: generating nice threads in openscadvtkRotationalExtrusionFilter 辅助AI: coze 笔记📒: openscad 代码分析 // 半径缩放函数,用…...