什么是Jenkins?

Jenkins 是一个完全用 Java 编写的开源服务器。它允许您执行一系列操作来实现持续集成过程,这也是以自动化的方式进行的。

这个 CI 服务器运行在 servlet 容器中,例如 Apache Tomcat。Jenkins 通过自动化与构建、测试和部署相关的部分来促进软件项目中的持续集成和持续交付。这使开发人员可以轻松地通过将更改集成到项目中来持续改进产品。

Jenkins 以连续的方式自动化软件构建,并让开发人员在早期阶段就知道错误。强大的 Jenkins 社区是其受欢迎的主要原因之一。Jenkins 不仅可扩展,而且拥有繁荣的插件生态系统。

可以使用 Jenkins 执行的一些可能步骤是:

  • 使用 Gradle、Maven 等构建系统构建软件。
  • 使用 Nose2、PyTest、Robot、Selenium 等测试框架进行自动化测试。
  • 执行测试脚本(使用 Windows 终端、Linux shell 等)
  • 获得测试结果并执行后期操作,例如打印测试报告等。
  • 针对不同的输入组合执行测试场景以获得改进的测试覆盖率。
  • 自动创建和测试工件的持续集成 (CI)。这有助于在开发的早期阶段识别产品中的问题。

Jenkins的历史

Jenkins 自 2011 年开始开发,因此具有先发优势。Kohsuke Kawaguchi 在 Sun Microsystems 工作时创建了 Jenkins(当时称为“Hudson”)。Hudson 创建于 2004 年夏天,第一个版本发布于 2005 年 2 月。

在 Oracle 收购 Sun Microsystems 之后,Hudson 社区批准了一项创建 Jenkins 项目的提案。2011 年 2 月,甲骨文打算继续开发 Hudson,因此,Hudson 被分叉,而不是更名为 Jenkins。

尽管 Hudson 和 Jenkins 是独立开发的,但 Jenkins 获得的项目和贡献者比 Hudson 多得多。因此,Hudson 不再由社区维护。

Jenkins 发布周期

与其他开源项目一样,Jenkins 也有两条发布线——LTS(长期支持)和每周(常规)发布。Jenkins 非常擅长发布,因为稳定版本每四个星期发布一次。

Jenkins的显着特点

Jenkins 更多的是功能驱动而不是 UI 驱动,因此,了解什么是 Jenkins 需要一个学习曲线。以下是 Jenkins 提供的以开发人员为中心的强大功能:

1. 易于安装和配置

Jenkins 是独立的 Java 程序,与安装平台无关。它适用于几乎所有流行的操作系统,例如 Windows、不同版本的 Unix 和 Mac OS。

它可以作为普通安装程序使用,也可以作为 .war 文件使用。安装后,可以使用其 Web 界面轻松配置。

2.开源

由于它是开源的,因此可以免费使用。社区的大力参与使其成为强大的 CI/CD 工具。您可以从 Jenkins 社区获得支持,无论是针对可扩展性、支持、文档还是与 Jenkins 相关的任何其他功能。

3. 蓬勃发展的插件生态系统

Jenkins 的骨干是社区,社区成员在开发(和测试)更新中心提供的近 1500 多个插件方面发挥了重要作用。

4. 轻松分发

Jenkins 的设计方式使得跨多台机器和平台分配工作相对容易,以加速构建、测试和部署。

Jenkins是如何工作的?

Jenkins的架构

在我们深入了解 Jenkins 是如何工作之前,我们必须了解 Jenkins 的架构。这些是概述 Jenkins 中不同元素之间交互的一系列步骤:

  • 开发人员对源代码进行必要的修改并将更改提交到存储库。该文件的新版本将在用于维护源代码存储库的版本控制系统中创建。
  • Jenkins CI 服务器持续检查存储库是否有任何更改(以代码或库的形式),并且更改由服务器拉取
  • 在下一步中,我们确保具有“拉取更改”的构建是否正在通过。构建服务器使用代码执行构建, 如果构建过程成功,则会生成可执行文件。如果构建失败,系统会向开发人员发送一封带有构建日志和其他构建工件链接的自动电子邮件。
  • 如果构建成功,构建的应用程序(或可执行文件)将部署到测试服务器。此步骤有助于实现连续测试,新构建的可执行文件将通过一系列自动化测试。如果更改导致功能中断,开发人员会收到警报。
  • 如果签入的代码没有构建、集成和测试问题,更改和测试的应用程序将自动部署到生产/生产服务器

这是 Jenkins 架构的图示:


单个 Jenkins 服务器可能不足以实现以下要求:

  • 测试需要在不同的环境中执行(即使用不同语言编写的代码,例如 Java、Python、C 等提交给版本控制系统),其中单个服务器可能无法满足要求。
  • 单个 Jenkins 服务器可能不足以处理大型软件项目带来的负载。

在这样的场景下,Jenkins的分布式(或Master-Slave)架构用于持续集成和测试。为了深入了解 Jenkins 的工作原理,我们来看看 Jenkins 的架构。

Jenkins 中的主从架构

Jenkins 中的主从(或分布式)架构用于管理分布式构建。Master 和 Slave 通过 TCP/IP 协议进行通信。

这些是 Jenkins Master 和 Slave 的角色和职责:

Master

Jenkins 中的主服务器是 Master。以下是 Jenkins Master 处理的工作:

  • 安排构建作业
  • 在主从生态系统中选择合适的从站来调度构建。
  • 监控奴隶并在需要时让他们在线/离线。
  • 向开发人员展示构建结果(和报告)。

Jenkins master 也可以直接执行作业,但始终建议为构建和执行相关任务选择合适的 slave。

Slave

从机是连接到主机的远程机器。根据项目和构建要求,您可以选择“N”个从站。从站可以在不同的操作系统上运行,并且根据“构建请求的类型”,主站选择合适的从站来执行构建和测试。

以下是 Jenkins Slave 处理的工作:

  • 听从 Jenkins Master 的命令。
  • 执行由 Master 分派的构建作业。
  • 开发人员可以灵活地在特定的 Slave 或特定类型的 Slave 上运行构建和执行测试。默认选项是 Jenkins Master 选择最适合该作业的 Slave。

这是 Jenkins 如何工作的简单图示,多个 Jenkins Slaves 连接到 Jenkins Master:


Jenkins 在主从架构中是如何工作的?

在什么是 Jenkins 博客的上一节中,我们谈到了 Jenkins 中 Master 和 Slave 的简要职责。让我们看看 Jenkins 在 Master-Slave(或分布式)架构中究竟是如何工作的:

在下图所示的 Jenkins Master-Slave 架构中,共有三个 Slave,分别运行在不同的操作系统(即 Windows 10、Linux 和 Mac OS)上。


  • 开发人员在左侧描述的“远程源代码存储库”中签入各自的代码更改。
  • 只有 Jenkins master 连接到存储库,它会定期检查代码更改(在存储库中)。所有 Jenkins Slaves 都连接到 Jenkins Master。
  • Jenkins master 根据执行构建所需的环境将请求(用于构建和测试)分派给适当的 Jenkins Slave。这使您可以在整个架构的不同环境中执行构建和执行测试。
  • Slave 执行测试,生成测试报告,并发送给 Jenkins Master 进行监控。

随着开发人员不断推送代码,Jenkins Slaves 可以针对不同平台运行不同构建版本的代码。Jenkins Master(或主节点)控制着各个构建的运行方式。

Jenkins的优点和缺点

我们希望这篇“什么是 Jenkins”博客能帮助您从更实际的意义上了解 CI 服务器。在加入 Jenkins 潮流之前,了解其优点和缺点至关重要。我们将它们列出来让您更容易选择 -

Jenkins的优势

下面列出了使用 Jenkins 的一些重要优势:

  • Jenkins 是开源的,可以免费使用。它是早期创业公司和大公司首选的 CI/CD 工具,因为它已经开发了很长时间。
  • 它是一个丰富的插件生态系统。在撰写本文时,有近 1500 多个插件可供使用。
  • Jenkins 可以与流行的云平台集成,例如 Amazon EC2、Google Cloud、VMWare vSphere、Digital Ocean 等。
  • Jenkins Pipelines 对于实现大型项目的 CD 要求非常有用。

Jenkins的缺点

Jenkins 也有自己的缺点(不一定是缺点)。这些是 Jenkins 的一些主要缺点:

  • 作为一种产品,Jenkins 更受“功能”驱动和“开发人员”为中心。痴迷于用户界面的用户可能必须经历一个学习曲线才能使用 Jenkins。
  • 设置更改(包括插件安装)可能会导致 Jenkins 无法启动等问题。在这种情况下,您必须在线搜索解决方案,幸运的是您会找到一个,因为 Jenkins 拥有庞大的用户群!