Jenkins 与源代码控制 (Git) 集成

JenkinsBeginner
立即练习

介绍

欢迎来到这个关于将 Jenkins 与 Git 集成的实验(Lab)。源代码管理(SCM)是现代软件开发的一个基石。将你的持续集成(CI)服务器(如 Jenkins)与 SCM 系统(如 Git)集成,是自动化构建和测试流程的一个基本步骤。

在这个实验中,你将学习如何:

  • 验证 Jenkins Git 插件是否可用。
  • 创建一个链接到本地 Git 仓库的自由风格(Freestyle)项目。
  • 添加一个构建步骤来执行仓库中的脚本。
  • 手动运行一次构建来测试配置。
  • 配置 SCM 轮询(polling)以便在新提交时自动触发构建。

一个 Jenkins 实例已经为本次实验运行起来了。你可以通过打开桌面上的 Firefox 浏览器来访问 Jenkins Web 界面。浏览器将自动打开到 http://localhost:8080,因此你无需手动输入 URL。不需要登录。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 初级 级别的实验,完成率为 98%。获得了学习者 97% 的好评率。

验证 Git 插件

Jenkins 内置了 Git 集成功能。Git 插件默认已安装,允许 Jenkins 与 Git 仓库进行交互。我们来验证一下 Git 插件是否可用。

  1. 从桌面界面打开 Firefox 浏览器。浏览器会自动打开到 http://localhost:8080,因此你无需手动输入 URL。无需登录。
  2. 在 Jenkins 仪表盘(dashboard)上,点击右上角的齿轮图标(设置按钮)。
  3. 在设置页面上,找到并点击 Plugins
  4. 选择 Installed plugins 标签页。
  5. 在右侧的搜索框中,输入 Git 以筛选已安装的插件。
  6. 你应该在已安装的插件列表中看到 Git plugin,这确认了 Git 集成是可用的。
Jenkins installed plugins page

确认 Git 插件可用后,你现在可以继续下一步,创建一个使用 Git 的项目了。

创建项目并配置 Git SCM

Git 插件安装完成后,你现在可以创建一个 Jenkins 项目并将其配置为从 Git 仓库拉取源代码。

  1. 点击左上角面包屑导航中的 Dashboard 链接,返回到 Jenkins 主仪表板。
  2. 点击左侧边栏中的 New Item
  3. 输入 git-integration-project 作为项目名称。
  4. 选择 Freestyle project
  5. 点击 OK

这将带你进入项目的配置页面。

  1. 向下滚动到 Source Code Management 部分。
  2. 选择 Git 选项。如果你没有看到此选项,请验证 Git 插件是否已在上一 步中正确安装。
  3. Repository URL 字段中,输入为你准备好的本地 Git 仓库的绝对路径:
https://github.com/labex-labs/git-playground
  1. Branch Specifier 保留为默认值 */master。这告诉 Jenkins 使用 master 分支。
  2. 点击页面底部的 Save 按钮。
Source Code Management section in project configuration

你已成功创建了一个链接到 Git 仓库的 Jenkins 作业。在下一步中,你将定义该作业应该如何处理代码。

添加构建步骤并运行手动构建

现在 Jenkins 知道从哪里获取代码了,你需要告诉它如何处理这些代码。你将添加一个包含 shell 命令的构建步骤,然后手动运行一次构建来测试它。

  1. git-integration-project 的项目页面上,点击左侧边栏中的 Configure
  2. 向下滚动到 Build Steps 部分。
  3. 点击 Add build step 下拉菜单,然后选择 Execute shell
  4. Command 文本区域中,输入以下构建命令:
echo "Building the project..."
date
echo "Listing files in workspace:"
ls -la
echo "Build complete!"

当作业运行时,Jenkins 会首先将 Git 仓库克隆到其工作空间,然后从该工作空间内执行这些命令。

  1. 点击 Save
  2. 你现在回到了项目页面。点击左侧边栏中的 Build Now 来启动一次构建。

一个新的构建将出现在 Build History 面板中。等待它完成(状态图标将变为蓝色表示成功)。

  1. 点击构建编号(例如 #1)。
  2. 从构建的菜单中点击 Console Output
Build History

你应该会看到输出确认 Jenkins 已成功克隆仓库并执行了你的命令。

Started by user admin
Running as SYSTEM
Building in workspace /var/jenkins_home/workspace/git-integration-project
 > git rev-parse --resolve-git-dir /var/jenkins_home/workspace/git-integration-project/.git ## timeout=10
...
[git-integration-project] $ /bin/sh -xe /tmp/jenkins123.sh
+ echo Building the project...
Building the project...
+ date
Mon Jan 1 12:01:00 UTC 2024
+ echo Listing files in workspace:
Listing files in workspace:
+ ls -la
total 24
drwxr-xr-x 3 jenkins jenkins 4096 Aug 21 10:33 .
drwxr-xr-x 3 jenkins jenkins 4096 Aug 21 10:33 ..
drwxr-xr-x 8 jenkins jenkins 4096 Aug 21 10:33 .git
-rw-r--r-- 1 jenkins jenkins   32 Aug 21 10:33 README.md
-rw-r--r-- 1 jenkins jenkins   15 Aug 21 10:33 file1.txt
-rw-r--r-- 1 jenkins jenkins   15 Aug 21 10:33 file2.txt
+ echo Build complete!
Build complete!
Finished: SUCCESS

启用 SCM 轮询以实现自动构建

手动运行构建对于测试很有用,但 CI 的真正威力在于自动化。在此步骤中,你将配置 Jenkins,使其在检测到 Git 仓库中的更改时自动启动构建。

  1. 返回 git-integration-project 的配置页面(Project Page > Configure)。
  2. 向下滚动到 Build Triggers 部分。
  3. 勾选 Poll SCM 旁边的复选框。
  4. 会出现一个 Schedule 文本框。这使用了 cron 语法来定义 Jenkins 检查仓库更改的频率。要每分钟轮询一次,请输入以下内容:
* * * * *
  1. 点击 Save

由于我们使用的是远程 GitHub 仓库 (https://github.com/labex-labs/git-playground),我们无法直接修改它来测试轮询触发器。但是,你可以观察 SCM 轮询是如何工作的:

  1. 返回 Jenkins UI 并转到 git-integration-project 页面。
  2. 在左侧边栏中,你会看到一个名为 Git Polling Log 的新选项。点击它。
  3. 此页面显示了轮询活动。你应该会看到类似以下的条目:
Started on Aug 21, 2025, 10:36:00 AM
Using strategy: Default
[poll] Last Built Revision: Revision d22f46ba8c2d4e07d773c5126e9c803933eb5898 (refs/remotes/origin/master)
The recommended git tool is: NONE
No credentials specified
 > git --version ## timeout=10
 > git --version ## 'git version 2.30.2'
 > git ls-remote -h -- https://github.com/labex-labs/git-playground ## timeout=10
Found 3 remote heads on https://github.com/labex-labs/git-playground
[poll] Latest remote head revision on refs/heads/master is: d22f46ba8c2d4e07d773c5126e9c803933eb5898 - already built by 1
Done. Took 0.36 sec
No changes

这表明 Jenkins 正在成功地每分钟轮询远程仓库以查找更改。在实际场景中,当新的提交被推送到仓库时,Jenkins 会自动触发新的构建。

  1. 你也可以通过点击 Build Now 来手动触发另一个构建,以查看轮询系统如何与手动构建集成。

总结

在此次实验中,你获得了 CI 流水线中最关键的集成之一的实践经验:将 Jenkins 连接到 Git 源代码控制仓库。

你已成功:

  • 验证了启用 Jenkins Git 集成功能所必需的 Git plugin 可用。
  • 创建了一个 Freestyle project 并将其配置为从 Git 仓库检出代码。
  • 定义了一个 build step 来执行从检出的代码中的 shell 脚本。
  • 通过运行 manual build 验证了设置。
  • 使用 Poll SCM 设置了自动构建触发器,这使得 Jenkins 能够自动检测并构建新的提交。

这些技能是自动化开发工作流程的基础,也是使用 Jenkins 构建健壮高效的 CI/CD 流水线的首要步骤。