在我的文章 使用开源工具构建 DevOps 管道的初学者指南 中,我分享了一个从头开始构建 DevOps 管道的故事。驱动该计划的核心技术是 Jenkins,一种构建持续集成和持续交付 (CI/CD) 管道的开源工具。
在花旗银行,有一个独立的团队提供了具有稳定主从节点设置的专用 Jenkins 管道,但该环境仅用于质量保证 (QA)、暂存和生产环境。开发环境仍然非常手动,我们的团队需要对其进行自动化,以尽可能地获得灵活性,同时加速开发工作。这就是我们决定为 DevOps 构建 CI/CD 管道的原因。由于其灵活性、开放性、强大的插件功能和易用性,Jenkins 的开源版本是显而易见的选择。
在本文中,我将分享一个分步演练,介绍如何使用 Jenkins 构建 CI/CD 管道。
什么是管道?
在开始教程之前,了解一些关于 CI/CD 管道的知识会很有帮助。
首先,需要了解的是 Jenkins 本身不是管道。仅仅创建一个新的 Jenkins 作业并不能构建管道。可以将 Jenkins 想象成一个遥控器——你可以在这里点击按钮。当你点击一个按钮时会发生什么,取决于遥控器被构建用来控制什么。Jenkins 提供了一种方式,让其他的应用程序 API、软件库、构建工具等可以插入到 Jenkins 中,然后它执行并自动化这些任务。 Jenkins 本身并不执行任何功能,但是随着越来越多的工具插入其中,它会变得越来越强大。
管道是一个单独的概念,指的是按顺序连接在一起的事件或作业组
管道是能够被执行的一系列事件或作业。
理解管道最简单的方法是将它可视化为一系列阶段,就像这样

在这里,你应该会看到两个熟悉的概念:阶段和步骤。
- 阶段:一个包含一系列步骤的块。阶段块可以被命名为任何东西;它被用于可视化管道流程。
- 步骤:一个说明要做什么的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 管道

如何构建 Jenkins 管道
为了使本教程更容易理解,我创建了一个示例 GitHub 仓库 和一个视频教程。
在开始本教程之前,你需要
- Java 开发工具包: 如果你还没有安装,安装一个 JDK 并将其添加到环境变量中,以便 Java 命令 (如 java jar) 可以通过终端执行。 这是必要的,以便利用本教程中使用的 Java Web Archive (WAR) 版本的 Jenkins(尽管你可以使用任何其他发行版)。
- 基本的计算机操作: 你应该知道如何键入一些代码,通过 shell 执行基本的 Linux 命令,以及打开一个浏览器。
让我们开始吧。
步骤 1:下载 Jenkins
导航到 Jenkins 下载页面。向下滚动到 通用 Java 包 (.war) 并点击它来下载文件;将其保存在一个你可以轻松找到它的地方。(如果你选择另一个 Jenkins 发行版,除了第 2 步之外,本教程的其余步骤应该基本相同。)使用 WAR 文件的原因是它是一个一次性的可执行文件,易于执行和移除。

步骤 2:将 Jenkins 作为 Java 二进制文件执行
打开一个终端窗口,并使用 cd <your path> 进入你下载 Jenkins 的目录。(在你继续之前,确保 JDK 已经安装并添加到环境变量中。)执行以下命令,该命令会将 WAR 文件作为可执行二进制文件运行
java -jar ./jenkins.war
如果一切顺利,Jenkins 应该在默认端口 8080 上启动并运行。

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

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

你将会看到一个 Jenkins 作业配置页面。向下滚动到找到 管道部分。有两种方法可以执行 Jenkins 管道。一种方法是在 Jenkins 上直接编写管道脚本,另一种方法是从 SCM(源代码管理)检索 Jenkins 文件。我们将在接下来的两个步骤中介绍这两种方法。
步骤 5:通过直接脚本配置和执行管道作业
为了使用直接脚本执行管道,首先从 GitHub 复制 示例 Jenkinsfile 的内容。选择 Pipeline script 作为 Destination,并将 Jenkinsfile 的内容粘贴到 Script 中。花一些时间研究 Jenkins 文件的结构。请注意,有三个阶段:Build、Test 和 Deploy,它们是任意的,可以是任何东西。在每个阶段中,都有步骤;在本例中,它们只是打印一些随机消息。
点击 Save 来保存更改,它应该会自动带你回到 Job Overview。

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

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

步骤 6:使用 SCM 配置和执行管道作业
现在,切换一下:在这一步中,你将通过从源控制的 GitHub 复制 Jenkinsfile 来部署相同的 Jenkins 作业。在相同的 GitHub 仓库 中,点击 Clone or download 并复制它的 URL 来获取仓库 URL。

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

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

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

做更多的事情,而不仅仅是打印消息
恭喜你!你已经构建了你的第一个 Jenkins 管道!
"但是等等," 你说,"这是非常有限的。除了打印虚拟消息之外,我实际上无法用它做任何事情。" 没关系。到目前为止,本教程只是提供了 Jenkins 管道能做什么的惊鸿一瞥,但是你可以通过将它与其他工具集成来扩展它的能力。以下是一些关于你的下一个项目的想法
- 构建一个多阶段的 Java 构建管道,该管道从 Nexus 或 Artifactory 等 JAR 仓库中提取依赖项,编译 Java 代码,运行单元测试,打包成 JAR/WAR 文件,并部署到云服务器。
- 实现高级的代码测试仪表板,它将基于单元测试、负载测试和 Selenium 的自动化用户界面测试来报告项目的健康状况。
- 构建一个多管道或多用户管道,自动化执行 Ansible playbook 的任务,同时允许授权用户响应正在进行中的任务。
- 设计一个完整的端到端 DevOps 管道,它从 GitHub 等 SCM 中提取基础设施资源文件和配置文件,并通过各种运行时程序执行脚本。
按照本文末尾的任何教程来了解这些更高级的案例。
管理 Jenkins
从主 Jenkins 仪表板,点击 管理 Jenkins。

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

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

接下来该做什么?
本文将引导您使用 Jenkins,这是一个很棒的开源工具,来创建 CI/CD 管道。 要了解有关 Jenkins 的更多功能,请查看 Opensource.com 上的其他文章。
- Jenkins X 入门
- 使用 Jenkins 安装 OpenStack 云
- 在容器中运行 Jenkins 构建
- Jenkins 管道入门
- 如何将 JMeter 与 Jenkins 一起运行
- 将 OpenStack 集成到您的 Jenkins 工作流程中
您可能对我的其他文章感兴趣,这些文章可以补充您的开源之旅
评论已关闭。