Jenkins 的前身是 Hudson,一个诞生于 2005 年的持续集成系统,由于优秀的架构设计和良好的产品体验,Jenkins/Hudson 是第一个被大规模应用的持续集成产品。后面持续集成的概念持续演进,从 CI 演变到了 CICD。 不仅仅是 Continuous Integration(自动化打包,测试,版本发布),还包含 Continuous Delivery(自动化交付,跟进一步,部署到生产环境,自动交付到用户使用)。
近几年随着云原生技术的发展,Tekton 应时而生,成为云原生环境下面 CICD 的一个非常的可选方案。 下面从不同维度,对比一下 Jenkins/Tekton 两个产品的差异。
一、功能对比
对比项 | Jenkins | Tekton | 说明 |
---|---|---|---|
诞生时间 | 2008/2005 | 2019 | Jenkins 的前身 Hudson 诞生于 2005 年,2008 年改名为 Jenkins |
实现语言 | Java | Go | |
产品发布形式 | war | 容器镜像 | Jenkins 也有容器镜像可以直接使用 |
运行环境 | Server/JVM | Kubernetes | tekton 的每一个 task 在一个单独的 k8s 容器中运行,运行完容器即退出; Jenkins 的每一个 step 都是执行一个命令,或者一个插件的调用; |
主要概念 | Pipeline, Stage, Steps | Pipeline, Task | |
CICD 集群支持 | 主从模式,多个节点 | Kubernetes 多副本部署 | |
数据存储 | 服务所在机器的本地目录上 | 在 workspace 中,通常 workspace 在挂载的 Persistence Volume 上,可以在不同的 task 之间共享一个工作空间 | Tekton 中的 workspace 是多个 task 之间可以共享的一个工作空间 |
上手难易程度 | 简单 | 略复杂 | |
可用插件(生态) | 大量插件,丰富的生态 | 插件相对较少,但通过直接使用自定义的镜像,可以使用的功能非常多 | |
Webhook | 支持 | 支持 | |
多语言支持 | 支持 | 支持 | |
灵活程度 | 高 | 高 | Jenkins/Tekton 都非常的灵活 |
成熟度 | 高 | 高 |
二、Jenkins/Tekton 两个产品的定位
Jenkins 是一个通用的 CICD 产品,可以用于任意应用的编译,测试,打包,集成,发布。
Tekton 本身运行于 kubernetes 环境中,tekton 的流水线中的每一个任务,运行时都会启动一个 pod 来执行。可以复用云原生环境中的各种镜像设施,不需要单独部署 VM 上的应用来管理 CICD 过程。 Tekton 更适合于云原生应用的 CICD。
Tekton 的 pipeline
三、我该如何选择?
如果你的应用大部分都是云原生环境的应用,部署于 k8s 之上,且团队中有人对于 k8s/docker 比较熟悉,推荐使用 Tekton 来作为 CICD 的基础设施。
如果不是云原生应用,或者团队对于 k8s/docker 不够熟悉, 建议使用 Jenkins 来做 CICD。
另外一个方面,如果你想要复用云原生的技能,复用云原生的基础设施,包括 tekton hub 的基础任务,建议使用 Tekton 来做 CICD。