使用 Jenkins 构建 CI/CD 管道

通过此分步 Jenkins 教程构建持续集成和持续交付 (CI/CD) 管道。
240 位读者喜欢这篇文章。

在我的文章 使用开源工具构建 DevOps 管道的初学者指南 中,我分享了一个从头开始构建 DevOps 管道的故事。驱动该计划的核心技术是 Jenkins,一种构建持续集成和持续交付 (CI/CD) 管道的开源工具。

在花旗银行,有一个独立的团队提供了具有稳定主从节点设置的专用 Jenkins 管道,但该环境仅用于质量保证 (QA)、暂存和生产环境。开发环境仍然非常手动,我们的团队需要对其进行自动化,以尽可能地获得灵活性,同时加速开发工作。这就是我们决定为 DevOps 构建 CI/CD 管道的原因。由于其灵活性、开放性、强大的插件功能和易用性,Jenkins 的开源版本是显而易见的选择。

在本文中,我将分享一个分步演练,介绍如何使用 Jenkins 构建 CI/CD 管道。

什么是管道?

在开始教程之前,了解一些关于 CI/CD 管道的知识会很有帮助。

首先,需要了解的是 Jenkins 本身不是管道。仅仅创建一个新的 Jenkins 作业并不能构建管道。可以将 Jenkins 想象成一个遥控器——你可以在这里点击按钮。当你点击一个按钮时会发生什么,取决于遥控器被构建用来控制什么。Jenkins 提供了一种方式,让其他的应用程序 API、软件库、构建工具等可以插入到 Jenkins 中,然后它执行并自动化这些任务。 Jenkins 本身并不执行任何功能,但是随着越来越多的工具插入其中,它会变得越来越强大。

管道是一个单独的概念,指的是按顺序连接在一起的事件或作业组

管道是能够被执行的一系列事件或作业。

理解管道最简单的方法是将它可视化为一系列阶段,就像这样

Pipeline example

在这里,你应该会看到两个熟悉的概念:阶段步骤

  • 阶段:一个包含一系列步骤的块。阶段块可以被命名为任何东西;它被用于可视化管道流程。
  • 步骤:一个说明要做什么的task。步骤定义在一个阶段块里面。

在上面的例子中,阶段 1 可以被命名为 "Build"、"Gather Information",或者任何东西,对于其他的阶段块,也适用相同的想法。"步骤" 只是说明了要执行什么,它可以是一个简单的打印命令 (例如,echo "Hello, World"),一个程序执行命令 (例如,java HelloWorld),一个 shell 执行命令 (例如,chmod 755 Hello),或者任何其他的命令——只要它被 Jenkins 环境识别为一个可执行的命令。

Jenkins 管道以编纂的脚本形式提供,通常被称为 Jenkinsfile,虽然文件名可以不同。这是一个简单的 Jenkins 管道文件的例子。

// Example of Jenkins pipeline script

pipeline {
  stages {
    stage("Build") {
       steps {
          // Just print a Hello, Pipeline to the console
          echo "Hello, Pipeline!"
          // Compile a Java file. This requires JDKconfiguration from Jenkins
          javac HelloWorld.java
          // Execute the compiled Java binary called HelloWorld. This requires JDK configuration from Jenkins
          java HelloWorld
          // Executes the Apache Maven commands, clean then package. This requires Apache Maven configuration from Jenkins
          mvn clean package ./HelloPackage
          // List the files in current directory path by executing a default shell command
          sh "ls -ltr"
       }
   }
   // And next stages if you want to define further...
 } // End of stages
} // End of pipeline

从这个示例脚本中很容易看到 Jenkins 管道的结构。 注意,一些命令,如 java, javac, 和 mvn,默认情况下是不可用的,它们需要通过 Jenkins 安装和配置。 因此

Jenkins 管道是一种以定义的方式按顺序执行 Jenkins 作业的方法,它通过将其编码并在可以包含包含任务的多个步骤的多个块中对其进行结构化。

好的。现在你了解了什么是 Jenkins 管道,我将向你展示如何创建和执行 Jenkins 管道。在本教程的最后,你将构建一个像这样的 Jenkins 管道

Final Result

如何构建 Jenkins 管道

为了使本教程更容易理解,我创建了一个示例 GitHub 仓库 和一个视频教程。

在开始本教程之前,你需要

  • Java 开发工具包: 如果你还没有安装,安装一个 JDK 并将其添加到环境变量中,以便 Java 命令 (如 java jar) 可以通过终端执行。 这是必要的,以便利用本教程中使用的 Java Web Archive (WAR) 版本的 Jenkins(尽管你可以使用任何其他发行版)。
  • 基本的计算机操作: 你应该知道如何键入一些代码,通过 shell 执行基本的 Linux 命令,以及打开一个浏览器。

让我们开始吧。

步骤 1:下载 Jenkins

导航到 Jenkins 下载页面。向下滚动到 通用 Java 包 (.war) 并点击它来下载文件;将其保存在一个你可以轻松找到它的地方。(如果你选择另一个 Jenkins 发行版,除了第 2 步之外,本教程的其余步骤应该基本相同。)使用 WAR 文件的原因是它是一个一次性的可执行文件,易于执行和移除。

Download Jenkins as Java WAR file

步骤 2:将 Jenkins 作为 Java 二进制文件执行

打开一个终端窗口,并使用 cd <your path> 进入你下载 Jenkins 的目录。(在你继续之前,确保 JDK 已经安装并添加到环境变量中。)执行以下命令,该命令会将 WAR 文件作为可执行二进制文件运行

java -jar ./jenkins.war

如果一切顺利,Jenkins 应该在默认端口 8080 上启动并运行。

Execute as an executable JAR binary

步骤 3:创建一个新的 Jenkins 作业

打开一个 Web 浏览器并导航到 localhost:8080。除非你之前安装过 Jenkins,否则它应该直接进入 Jenkins 仪表板。点击 创建新作业。你也可以点击左侧的 新建项目

Create New Job

步骤 4:创建一个管道作业

在这一步中,你可以选择和定义你想要创建的 Jenkins 作业的类型。选择 Pipeline 并给它一个名称(例如,TestPipeline)。点击 OK 来创建一个管道作业。

Create New Pipeline Job

你将会看到一个 Jenkins 作业配置页面。向下滚动到找到 管道部分。有两种方法可以执行 Jenkins 管道。一种方法是在 Jenkins 上直接编写管道脚本,另一种方法是从 SCM(源代码管理)检索 Jenkins 文件。我们将在接下来的两个步骤中介绍这两种方法。

步骤 5:通过直接脚本配置和执行管道作业

为了使用直接脚本执行管道,首先从 GitHub 复制 示例 Jenkinsfile 的内容。选择 Pipeline script 作为 Destination,并将 Jenkinsfile 的内容粘贴到 Script 中。花一些时间研究 Jenkins 文件的结构。请注意,有三个阶段:Build、Test 和 Deploy,它们是任意的,可以是任何东西。在每个阶段中,都有步骤;在本例中,它们只是打印一些随机消息。

点击 Save 来保存更改,它应该会自动带你回到 Job Overview。

Configure to Run as Jenkins Script

要开始构建管道的过程,点击 Build Now。如果一切正常,你将会看到你的第一个管道(如下所示)。

Click Build Now and See Result

要查看管道脚本构建的输出,点击任何阶段并点击 Log。你将会看到一个类似这样的消息。

Visit sample GitHub with Jenkins get clone link

步骤 6:使用 SCM 配置和执行管道作业

现在,切换一下:在这一步中,你将通过从源控制的 GitHub 复制 Jenkinsfile 来部署相同的 Jenkins 作业。在相同的 GitHub 仓库 中,点击 Clone or download 并复制它的 URL 来获取仓库 URL。

Checkout from GitHub

点击 Configure 来修改现有的作业。滚动到 Advanced Project Options 设置,但是这次,在 Destination 下拉菜单中选择 Pipeline script from SCM 选项。将 GitHub 仓库的 URL 粘贴到 Repository URL 中,并在 Script Path 中键入 Jenkinsfile。点击 Save 按钮来保存。

Change to Pipeline script from SCM

要构建管道,一旦你回到任务概述页面,点击 Build Now 再次执行作业。结果将与之前相同,除了你有一个额外的阶段叫做 Declaration: Checkout SCM

Build again and verify

要查看来自 SCM 构建的管道输出,点击阶段并查看 Log 来检查源代码克隆过程是如何进行的。

Verify Checkout Procedure

做更多的事情,而不仅仅是打印消息

恭喜你!你已经构建了你的第一个 Jenkins 管道!

"但是等等," 你说,"这是非常有限的。除了打印虚拟消息之外,我实际上无法用它做任何事情。" 没关系。到目前为止,本教程只是提供了 Jenkins 管道能做什么的惊鸿一瞥,但是你可以通过将它与其他工具集成来扩展它的能力。以下是一些关于你的下一个项目的想法

  • 构建一个多阶段的 Java 构建管道,该管道从 Nexus 或 Artifactory 等 JAR 仓库中提取依赖项,编译 Java 代码,运行单元测试,打包成 JAR/WAR 文件,并部署到云服务器。
  • 实现高级的代码测试仪表板,它将基于单元测试、负载测试和 Selenium 的自动化用户界面测试来报告项目的健康状况。
  • 构建一个多管道或多用户管道,自动化执行 Ansible playbook 的任务,同时允许授权用户响应正在进行中的任务。
  • 设计一个完整的端到端 DevOps 管道,它从 GitHub 等 SCM 中提取基础设施资源文件和配置文件,并通过各种运行时程序执行脚本。

按照本文末尾的任何教程来了解这些更高级的案例。

管理 Jenkins

从主 Jenkins 仪表板,点击 管理 Jenkins

Manage Jenkins

全局工具配置

这里有很多可用的选项,包括管理插件、查看系统日志等等。点击 全局工具配置

Global Tools Configuration

添加额外的功能

在这里,你可以添加 JDK 路径、Git、Gradle 等等。在你配置了一个工具之后,只需要将命令添加到你的 Jenkinsfile 中,或者通过你的 Jenkins 脚本来执行它。

See Various Options for Plugin

接下来该做什么?

本文将引导您使用 Jenkins,这是一个很棒的开源工具,来创建 CI/CD 管道。 要了解有关 Jenkins 的更多功能,请查看 Opensource.com 上的其他文章。

您可能对我的其他文章感兴趣,这些文章可以补充您的开源之旅

标签
User profile image.
Bryant Jimin Son 是一名 Octocat,这不是正式头衔,但他喜欢这样称呼自己。他在 GitHub 工作,该公司以托管世界上大多数开源项目而广为人知。 在工作中,他正在探索不同的 git 技术、GitHub Actions、GitHub 安全性等。 之前,他是 Red Hat 的高级顾问,Red Hat 是一家以其 Linux 服务器和开源贡献而闻名的科技公司。

评论已关闭。

© . All rights reserved.