什么是 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 将向开发团队通知错误。 |
由于代码是一次性构建的,一些开发人员需要等待其他开发人员完成编码才能检查他们的构建。 | 代码在任何开发人员提交代码后会立即进行构建。 |
要隔离、检测和修复多个提交的错误并非易事。 | 由于代码是在单个开发人员每次提交后构建的,因此很容易确定是哪个开发人员的代码导致构建失败。 |
代码构建和测试过程完全是手动的,因此有很多出错的机会。 | 自动化构建和测试过程节省时间并减少缺陷。 |
代码将在所有错误修复并测试后部署。 | 代码将在每次成功构建和测试后部署。 |
开发周期缓慢 | 开发周期快速。新功能更容易提供给用户。增加利润。 |
持续集成的真实案例研究
我相信大家都知道以前的诺基亚手机。诺基亚曾实施过一种称为夜间构建的程序。白天,开发人员多次提交代码后,软件会在夜间构建。由于软件每天只构建一次,因此在大型代码库中隔离、识别和修复错误是一件非常痛苦的事情。
后来,他们采用了持续集成方法。软件在开发人员提交代码后会立即进行构建和测试。如果检测到任何错误,相应的开发人员可以快速修复缺陷。
Jenkins 插件
默认情况下,Jenkins 附带一套有限的功能。如果您想将 Jenkins 安装与 Git 等版本控制工具集成,则需要安装与 Git 相关的插件。事实上,要与 Maven、Amazon EC2 等工具集成,您需要在 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 趋势相比,用户友好度不高。如果您正在考虑可能提供更现代用户体验的替代方案,您可能想探索一些可用的顶级持续集成工具。