什么是 Jenkins?为什么要使用持续集成 (CI) 工具?

什么是 Jenkins?

Jenkins 是一个用 Java 编写的开源持续集成服务器,用于编排一系列动作以自动实现持续集成过程。Jenkins 支持从构建、测试、记录软件、部署以及软件开发生命周期的其他阶段的完整开发生命周期。

Jenkins 是全球广泛使用的应用程序,拥有约 30 万个安装量,并且每天都在增长。通过使用 Jenkins,软件公司可以加速其软件开发过程,因为 Jenkins 可以快速自动化构建和测试。

它是一个基于服务器的应用程序,需要像 Apache Tomcat 这样的 Web 服务器。Jenkins 软件之所以如此受欢迎,是因为它能够监控项目中出现的重复任务。例如,如果您的团队正在开发一个项目,Jenkins 将持续测试您的项目构建,并在开发早期阶段向您显示错误。

什么是持续集成?

持续集成 是将多个开发人员的代码更改多次集成到单个项目中的过程。代码提交后会立即进行测试。每次代码提交,都会构建和测试代码。如果测试通过,则构建将被测试以进行部署。如果部署成功,代码将被推送到生产环境。

此提交、构建、测试和部署是一个持续的过程,因此得名为持续集成/部署。

Jenkins 如何工作?

Jenkins 是一个基于服务器的应用程序,需要在 Apache Tomcat 等 Web 服务器上运行,可在 Windows、Linux、macOS、Unix 等各种平台上运行。要使用 Jenkins,您需要创建管道,这些管道是一系列 Jenkins 服务器将执行的步骤。Jenkins 持续集成管道是一个强大的工具,包含一套用于托管监控编译测试代码或代码更改的工具,例如:

  • 持续集成服务器(Jenkins、Bamboo、CruiseControl、TeamCity 等)
  • 源代码管理工具(例如,CVS、SVN、GIT、Mercurial、Perforce、ClearCase 等)
  • 构建工具(Make、ANT、Maven、Ivy、Gradle 等)
  • 自动化测试框架(Selenium、Appium、TestComplete、UFT 等)

Jenkins 历史

  • Kohsuke Kawaguchi,一位在 SUN Microsystems 工作的 Java 开发者,厌倦了重复地构建代码和修复错误。2004 年,他创建了一个名为 Hudson 的自动化服务器,用于自动化构建和测试任务。
  • 2011 年,拥有 Sun Microsystems 的 Oracle 与 Hudson 开源社区发生争执,因此他们分叉了 Hudson 并将其重命名为 Jenkins。
  • Hudson 和 Jenkins 继续独立运行。但在很短的时间内,Jenkins 获得了大量项目和贡献者,而 Hudson 只剩下 32 个项目。随着时间的推移,Jenkins 变得越来越受欢迎,而 Hudson 已不再维护。

为什么在 Jenkins 中使用持续集成?

有些人可能认为老式的软件开发方式更好。让我们通过以下示例来理解 CI 与 Jenkins 结合的优势。

假设有大约 10 名开发人员在一个共享存储库上工作。有些开发人员需要 25 天才能完成任务,而另一些则需要 30 天。

Jenkins 之前 Jenkins 之后
所有开发人员完成分配的编码任务后,他们会将代码一次性提交。然后,测试并部署构建。

代码提交、构建和测试周期非常不频繁,很多天只进行一次构建。

代码在开发人员提交代码后会立即进行构建和测试。Jenkins 在一天内会构建和测试代码很多次。

如果构建成功,Jenkins 将把源代码部署到测试服务器并通知部署团队。

如果构建失败,Jenkins 将向开发团队通知错误。

由于代码是一次性构建的,一些开发人员需要等待其他开发人员完成编码才能检查他们的构建。 代码在任何开发人员提交代码后会立即进行构建。
要隔离、检测和修复多个提交的错误并非易事。 由于代码是在单个开发人员每次提交后构建的,因此很容易确定是哪个开发人员的代码导致构建失败。
代码构建和测试过程完全是手动的,因此有很多出错的机会。 自动化构建和测试过程节省时间并减少缺陷。
代码将在所有错误修复并测试后部署。 代码将在每次成功构建和测试后部署。
开发周期缓慢 开发周期快速。新功能更容易提供给用户。增加利润。

持续集成的真实案例研究

我相信大家都知道以前的诺基亚手机。诺基亚曾实施过一种称为夜间构建的程序。白天,开发人员多次提交代码后,软件会在夜间构建。由于软件每天只构建一次,因此在大型代码库中隔离、识别和修复错误是一件非常痛苦的事情。

后来,他们采用了持续集成方法。软件在开发人员提交代码后会立即进行构建和测试。如果检测到任何错误,相应的开发人员可以快速修复缺陷。

Real-world Case Study of Continuous Integration

Jenkins 插件

默认情况下,Jenkins 附带一套有限的功能。如果您想将 Jenkins 安装与 Git 等版本控制工具集成,则需要安装与 Git 相关的插件。事实上,要与 Maven、Amazon EC2 等工具集成,您需要在 Jenkins 中安装相应的插件。

Jenkins Plugins
Jenkins 中的插件集成

使用 Jenkins 的优势

  • Jenkins 由社区管理,社区非常开放。他们每个月都会举行公开会议,并从公众那里获取对 Jenkins 项目开发的意见。
  • 到目前为止,已关闭约 280 个工单,该项目每三个月发布一个稳定版本。
  • 随着技术的发展,Jenkins 也在发展。到目前为止,Jenkins 在其插件数据库中已发布约 320 个插件。借助插件,Jenkins 变得更加强大和功能丰富。
  • Jenkins 工具还支持基于云的架构,以便您可以在基于云的平台上部署 Jenkins。
  • Jenkins 受欢迎的原因是它是由开发者为开发者创建的。

使用 Jenkins 的缺点

尽管 Jenkins 是一个功能强大的工具,但它也有其缺点。

  • 与当前 UI 趋势相比,它的界面已经过时,不那么用户友好。
  • 尽管 Jenkins 深受许多开发者的喜爱,但维护它并不容易,因为 Jenkins 在服务器上运行,需要一些服务器管理员的技能来监控其活动。
  • 许多人没有实施 Jenkins 的原因之一是安装和配置 Jenkins 存在困难。
  • 持续集成由于一些小的设置更改而经常中断。持续集成将被暂停,因此需要一些开发人员的关注。

结论

  • 在持续集成中,代码提交后,软件会立即进行构建和测试。
  • Jenkins 用于编排一系列动作以实现软件项目的持续集成。
  • 在 Jenkins 之前,当所有开发人员完成分配的编码任务时,他们会将代码一次性提交。然后,测试并部署构建。
  • 在 Jenkins 之后,代码在开发人员提交代码后会立即进行构建和测试。Jenkins 在一天内会构建和测试代码很多次。
  • 默认情况下,Jenkins 附带一套有限的功能。如果您想将 Jenkins 安装与 Git 等版本控制工具集成,则需要安装与 Git 相关的插件。还可以查看最佳 Jenkins 替代工具
  • Jenkins 最大的优点是它由社区管理,社区会举行公开会议,并从公众那里获取对 Jenkins 项目开发的意见。
  • Jenkins 最大的缺点是其界面已过时,与当前 UI 趋势相比,用户友好度不高。如果您正在考虑可能提供更现代用户体验的替代方案,您可能想探索一些可用的顶级持续集成工具