Jenkins vs TeamCity: CI 工具怎么选?

Blog
Author:
Guy GolanGuy Golan
Published On:
2月 8, 2021
Estimated reading time:
1 minute

在过去的十年里,软件开发行业发生了剧变。从瀑布模型、敏捷方法,再到DevOps,新的东西层出不穷。现在有了 DevOps 的协助,开发和操作不断迭代,保障应用程序完全开发和部署。因此 CI/CD 在业界流行开来也就不足为奇了,相应地,CI/CD 工具(自动化规则)也不断推陈出新。但面对 CI/CD 工具市场,纷繁复杂的选择可能会让大家眼花缭乱。细看市场份额数据Jenkins 名列前茅(51.22%),TeamCity 占据第二(18.70%)。这些数据让人有些颇为惊讶,其精确性也有待进一步查证,所以我决定将文章重点放在比较 Jenkins TeamCity 上。但首先,我想简单介绍一下这两个工具。

什么是 Jenkins?

jenkins

在最初,Jenkins 是 Java 应用程序的自动化构建工具,现在已经有了巨大的发展,而且成为持续集成服务器的标准。除了开源(免费)之外,它还提供了 1400 多个插件,以便与其他平台和工具轻松集成(Top10 Jekins 插件)。易用性是另一个突出优势,因为 Jenkins 的安装和设置特别简单(带有项目管理仪表板,可以通过任何浏览器轻松访问)。(了解更多关于什么是 Jenkins

什么是 TeamCity?

teamcity

TeamCity 是 JetBrains 的商业 CI/CD 服务器。它的口号是“强大的连续集成工具,开箱即用”。这个口号也是名副其实,因为 TeamCity 的功能确实非常强大,甚至与 Jenkins 旗鼓相当 。它还提供了与 Jira 的集成,以便轻松地跟踪问题,另外还集成了 Visual StudioEclipseIDE。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。

分布执行

分布式执行就是将任务分发到其他机器上。JenkinsTeamCity 中都可以分布式式处理构建。IncredibuildJenkins TeamCity 都进行了集成,利用进程虚拟化技术加快整个构建进程,大大提高了编译、测试和打包等工作的完成速度。

通过调用本地空闲 CPU,或者无缝配置额外的云端内核,TeamCity 的节点可以按需扩展到数百个内核。 Incredibuild 本质上是将每个构建节点扩展成一个拥有数百个内核的超级计算机。内核按需分配,构建节点可以顺畅编译测试,并以更快的速度运行其他构建步骤。

例如,通过与 Incredibuild 集成,TeamCity 将构建执行时间缩短 6 倍,从 60分钟缩短到 10 分钟。Jenkins 的数据也很惊人:Incredibuild 的集成将 Jenkins 的构建时间从 15 分钟减少到 2 分钟。

pipelines

安全

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 构建

  技术概览

  • 关键集成
  • 云集成
  • 持续集成
  • 代码质量跟踪
  • 生成历史
  • 生成基础架构
  • VCS 互操作性
  • 系统维护
  • 用户管理
  • 预测试提交
受欢迎度 广泛使用 比 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 的免费版)。理论上的比较不可或缺,但没有什么比实践更有效了,在这些平台上创造一些构建,感受两种平台的优缺点,你自然就能做出对的选择。