在过去的十年里,软件开发行业发生了剧变。从瀑布模型、敏捷方法,再到DevOps,新的东西层出不穷。现在有了 DevOps 的协助,开发和操作不断迭代,保障应用程序完全开发和部署。因此 CI/CD 在业界流行开来也就不足为奇了,相应地,CI/CD 工具(自动化规则)也不断推陈出新。但面对 CI/CD 工具市场,纷繁复杂的选择可能会让大家眼花缭乱。细看市场份额数据, Jenkins 名列前茅(51.22%),TeamCity 占据第二(18.70%)。这些数据让人有些颇为惊讶,其精确性也有待进一步查证,所以我决定将文章重点放在比较 Jenkins 和 TeamCity 上。但首先,我想简单介绍一下这两个工具。
什么是 Jenkins?
在最初,Jenkins 是 Java 应用程序的自动化构建工具,现在已经有了巨大的发展,而且成为持续集成服务器的标准。除了开源(免费)之外,它还提供了 1400 多个插件,以便与其他平台和工具轻松集成(Top10 Jekins 插件)。易用性是另一个突出优势,因为 Jenkins 的安装和设置特别简单(带有项目管理仪表板,可以通过任何浏览器轻松访问)。(了解更多关于什么是 Jenkins)
什么是 TeamCity?
TeamCity 是 JetBrains 的商业 CI/CD 服务器。它的口号是“强大的连续集成工具,开箱即用”。这个口号也是名副其实,因为 TeamCity 的功能确实非常强大,甚至与 Jenkins 旗鼓相当 。它还提供了与 Jira 的集成,以便轻松地跟踪问题,另外还集成了 Visual Studio 和 Eclipse 等 IDE。TeamCity 也提供 .NET 框架支持,并集成有构建工件存储库,这个存储库将工件存储在 TeamCity 服务器文件系统或外部存储上。TeamCity 的 Professional 服务器许可的免费版本提供 100 种内置配置和 3 个生成代理配额。
Jenkins vs TeamCity:主要区别
开源 vs 商业
Jenkins 和 TeamCity 最根本的区别在于 Jenkins 是一个开源的持续集成工具,TeamCity 是一个商业工具。这意味着 Jenkins 项目得到了全球开发商的支持,而 TeamCity 则由其母公司 JetBrains 负责维护。
独家功能
尽管 Jenkins 没有太多的内置功能,但它庞大的插件生态系统提供了其他 CI工具无法比拟的大量功能。这些插件使 Jenkins 不仅能够创建构建,还能够分析代码以提高质量。
而 TeamCity 除了提供常规CI工具功能外,还提供一些“开箱即用”的功能。它支持不同平台,如 .NET、Ruby、Java 等。此外,TeamCity 有利于轻松构建 docker 映像,对 Jira 和 Bugzilla 的支持也有助于跟踪问题。TeamCity 还存储了构建更改和失败的历史记录,开发师可以跟踪过去的统计信息、运行过去的构建,并测试历史报告。
安装
安装 Jenkins,需要有 Java 和 Tomcat。如果两者都有,那么 Jenkins 的设置就很简单。安装后,你可以通过它的 web 界面配置 Jenkins。
TeamCity 的安装也很简单:只需下载 TeamCity 服务器并按照其文档中的说明进行操作即可。
界面
Jenkins 的界面非常传统,意思就是不够精美(至少感觉不是这个领域内最漂亮的界面)。“没有对比就没有伤害”,比较 Jenkins 和 TeamCity 的界面时,高下立见。TeamCity 的界面很漂亮(吸引了很多初学者),它还提供了便于组织的绑定、标记和注释构建的选项。
集成
一谈到集成,Jenkins 就是无冕之王。Jenkins 受追捧的最大原因,也是因为它集成了许多免费插件。与 Jenkins 相比,TeamCity 插件集成就相对较少了(300 多个插件)。不过,TeamCity 有一些独家集成,这也让这个工具更能“开箱即用”,例如与 Docker 集成,创建容器构建,与 Jira 和 Bugzilla 集成便于进行跟踪错误,支持 .NET framework,与云集成 AWS、Azure、GCP、VMware。
分布执行
分布式执行就是将任务分发到其他机器上。Jenkins 和 TeamCity 中都可以分布式式处理构建。Incredibuild 与 Jenkins 和 TeamCity 都进行了集成,利用进程虚拟化技术加快整个构建进程,大大提高了编译、测试和打包等工作的完成速度。
通过调用本地空闲 CPU,或者无缝配置额外的云端内核,TeamCity 的节点可以按需扩展到数百个内核。 Incredibuild 本质上是将每个构建节点扩展成一个拥有数百个内核的超级计算机。内核按需分配,构建节点可以顺畅编译测试,并以更快的速度运行其他构建步骤。
例如,通过与 Incredibuild 集成,TeamCity 将构建执行时间缩短 6 倍,从 60分钟缩短到 10 分钟。Jenkins 的数据也很惊人:Incredibuild 的集成将 Jenkins 的构建时间从 15 分钟减少到 2 分钟。
安全
TeamCity 是一个商业工具,因此比Jenkins有更好的安全特性。TeamCity 集成了 Snyk 安全插件,可以在构建管道中执行漏洞扫描,可以帮助识别和修复构建中的所有风险和威胁。
Jenkins 也有几个安全插件,但功能有限。这也是作为一个开源软件的缺陷,Jenkins 会面临各种安全漏洞。
社区
Jenkins 以其庞大的(甚至海量)社区资源而闻名,这个社区远远大于TeamCity 的社区。由于是开源的,任何开发人员都可以为 Jenkins 项目出谋划策。新开发人员每天都在不断地为项目贡献新的点子。然而,TeamCity 是商业工具,因此,JetBrains 团队负责维护,并对社区提供专业支持。
定价
由于是开源的,Jenkins 可以自由使用,这也是组织追求开源的主要原因。他们不必在使用 Jenkins 上投入一分钱(现实就是大家都爱“免费的午餐”)。TeamCity 是一个付费的解决方案(尽管有一个免费版本),并提供两个许可: Professional 服务器许可和 Enterprise 服务器许可。在 Professional 服务器许可中,我们可以免费使用 100 个生成配置和 3 个生成代理;额外的生成代理和 10 个生成配置需要花费 299 美元。
Enterprise 服务器许可从 3 个代理起售,最低定价为 1999美元,并提供不限数量的生成配置。
对比表 – Jenkins vs TeamCity
Jenkins | TeamCity | |
建立时间 | 2011 | 2006 |
语言 | Java | Java |
开发公司 | Kohsuke Kawaguchi, 免费的开源软件 | JetBrains |
许可 | MIT 许可证 | 专有商业软件 |
功能 | 内部托管
工作流插件 非常适合异步构建、部署或启动任何东西 HTML Publisher Throttle 构建 |
技术概览
|
受欢迎度 | 广泛使用 | 比 Jenkins 受欢迎度低 |
易用性 | 优秀 | 优秀 |
用户界面 | 一般 | 优秀 |
社区 | 庞大, 因为是开源 | 与 Jenkins 相比,较为有限 |
文件 | 易于使用 | 易于使用 |
定价 | 免费 | Professional 服务器许可license:3 个免费生成代理;3 个以上,每个 299 美元;
Enterprise 服务器许可: 1999 美元起 |
集成 | 1400+ 个集成 | 300+ 个集成 |
安全 | 不太安全 | 更安全 |
云 | 支持大多数云供应商 | 支持大多数云供应商 |
API | 支持 RESTful API: XML, JSON, Python | 支持 RESTful API 使用服务消息,并创建插件使用开放 API |
编程语言 | C, C++, Fortran, Java, PHP, Python 等脚本语言 | Java, .NET, Ruby, Python, C++, PHP, Node.js 等等 |
容器 | 使用 Docker 插件 | 顶级 Docker,开箱即用 |
发布周期 | 更频繁 | 一般 |
报告 | 提供构建和测试的详细报告 | 提供更好的 web UI 的报告 |
总结
本文对 Jenkins 和 TeamCity 的对比,希望可以帮助你根据自身需要选择正确的 CI 工具。这个选择并不简单,也不容易,因为不同的工具有不同的功能和优势。如果读完本文,你还是有所困惑,那就两个都试试(你可以使用 TeamCity 的免费版)。理论上的比较不可或缺,但没有什么比实践更有效了,在这些平台上创造一些构建,感受两种平台的优缺点,你自然就能做出对的选择。