Jenkins Day 1-2 学习笔记

Jenkins Day 1-2 学习笔记

核心概念与初始配置


一、在开始之前:理解 CI/CD

1.1 什么是 CI/CD

在没有 CI/CD 的时代,软件发布是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
传统发布流程(手动地狱):

开发者写完代码


压缩代码包,通过 QQ/邮件/FTP 发给测试


测试手动部署到服务器


发现问题,反馈给开发者


开发者修改,重新打包,再发一次...


重复 N 次后,终于没问题了


运维手动登录生产服务器,替换文件


祈祷别出问题 🙏

这个过程的问题:

1
2
3
4
5
❌ 重复劳动 —— 每次发布都要手动打包、上传、部署
❌ 容易出错 —— 人手动操作,总有疏忽的时候
❌ 反馈慢 —— 可能几天后才发现代码有问题
❌ 难以追溯 —— 谁发布的?什么时候发布的?改了什么?
❌ 发布恐惧 —— 每次上线都提心吊胆

CI/CD 就是用自动化来解决这些问题。

1.2 CI — 持续集成(Continuous Integration)

1
2
3
CI 的核心思想:
每次开发者提交代码后,自动触发一次"验证流程"
确保新代码和已有代码能正确地组合在一起
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CI 自动化流程:

开发者 git push

▼ 自动触发
┌────────────────────────────────┐
│ Jenkins(CI 服务器) │
│ │
│ 1. 拉取最新代码 │
│ 2. 编译代码(检查语法错误) │
│ 3. 运行单元测试(检查逻辑错误) │
│ 4. 代码质量扫描(检查规范问题) │
│ 5. 生成构建产物(jar/war/静态文件) │
│ │
└────────────────────────────────┘


自动通知结果(成功 ✅ / 失败 ❌)

CI 解决的问题:

  • 代码一提交就能知道有没有问题
  • 不用等到测试阶段才发现 bug
  • 多人协作时,尽早发现代码冲突

1.3 CD — 持续交付 / 持续部署

1
2
3
4
5
6
7
8
9
10
11
12
CD 有两个含义,别搞混:

持续交付(Continuous Delivery)
├── 自动构建 + 自动测试
├── 部署到生产环境需要人工确认(点一个按钮)
└──(金融、医疗)

持续部署(Continuous Deployment)
├── 自动构建 + 自动测试 + 自动部署
├── 适合:对稳定性要求高的场景
├── 全程无需人工干预
└── 适合:成熟的 DevOps 团队、互联网公司
1
2
3
4
5
6
7
8
完整 CI/CD 流水线:

代码提交 → 自动构建 → 自动测试 → 自动打包 → 自动部署到测试环境

人工确认(可选)


自动部署到生产环境

1.4 为什么选择 Jenkins

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CI/CD 工具对比:

工具 特点 适用场景
─────────────────────────────────────────────────────
Jenkins 开源免费,插件丰富,可定制 企业首选,灵活度最高
GitHub Actions 与 GitHub 深度集成 GitHub 项目
GitLab CI 与 GitLab 深度集成 GitLab 项目
Circle CI 云原生,配置简单 中小团队
ArgoCD Kubernetes 原生 K8s 环境

Jenkins 的优势:
├── 完全开源免费
├── 1800+ 插件,几乎能集成任何工具
├── 社区庞大,遇到问题容易找到解决方案
├── 可以部署在自己的服务器上,数据安全
└── 企业使用率最高,找工作必备技能

二、Jenkins 架构理解

2.1 核心架构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Jenkins 架构图:

┌───────────────────────────────────┐
│ Jenkins Master │
│ │
│ ┌──────────────┐ │
│ │ Web UI │ ← 你用浏览器 │
│ │ (端口 8080) │ 访问这里 │
│ └──────┬───────┘ │
│ │ │
│ ┌──────▼───────┐ │
│ │ 调度引擎 │ ← 决定任务 │
│ │ │ 分配给谁 │
│ └──────┬───────┘ │
│ │ │
│ ┌──────▼───────┐ │
│ │ 任务队列 │ ← 等待执行的 │
│ │ │ 构建任务 │
│ └──────────────┘ │
│ │
└──────────────────┬────────────────┘

┌────────────────┼────────────────┐
│ │ │
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Agent 1 | │ Agent 2 | | Agent 3 │
│ │ │ │ │ │
│ 执行构建任务 │ │ 执行构建任务 │ │ 执行构建任务 │
│ (实际干活的) │ │ (实际干活的) │ │ (实际干活的) │
└──────────────┘ └──────────────┘ └──────────────┘

2.2 Master 和 Agent 的职责

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Master(主节点)的职责:
├── 提供 Web 界面(你操作 Jenkins 的入口)
├── 管理配置(全局配置、项目配置)
├── 调度构建任务(决定哪个 Agent 执行什么)
├── 存储构建历史和日志
└── 管理插件和凭据

Agent(代理节点/从节点)的职责:
├── 实际执行构建任务(编译、测试、打包)
├── 可以是物理机、虚拟机、Docker 容器
├── 可以有多个 Agent 并行工作
└── Agent 挂了不影响 Master(任务可以重新分配)

重要概念:
├── 默认情况下,Master 也充当 Agent(小规模够用)
├── 企业环境中,Master 只做调度,不执行构建
└── Agent 可以按标签分组(比如 "java""nodejs""docker"

2.3 Jenkins 工作原理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
一个构建任务的完整生命周期:

1. 触发(Trigger)
├── 手动点击"立即构建"
├── 定时触发(每天早上 8 点)
├── 代码推送触发(Git Webhook)
└── 其他构建完成后触发

2. 排队(Queued)
├── 任务进入构建队列
└── Jenkins 找一个空闲的 Agent

3. 分配(Assigned)
├── Master 把任务分配给某个 Agent
└── Agent 准备工作空间(Workspace)

4. 执行(Building)
├── Agent 按照配置的步骤依次执行
├── 每一步的输出实时传回 Master
└── 你在 Web 界面上能看到实时日志

5. 完成(Completed)
├── 构建成功(SUCCESS)✅
├── 构建不稳定(UNSTABLE)⚠️ (测试失败但编译成功)
├── 构建失败(FAILURE)❌
└── 构建被中止(ABORTED)🚫

6. 后处理(Post Actions)
├── 发送邮件通知
├── 归档构建产物
├── 部署到服务器
└── 清理工作空间

三、Jenkins 初始配置(实操)

3.1 确认 Jenkins 已安装并运行

1
2
# 第一步:检查 Jenkins 服务状态
sudo systemctl status jenkins

你应该看到类似这样的输出:

1
2
3
4
5
6
7
8
9
10
● jenkins.service - Jenkins Continuous Integration Server
Loaded: loaded (/lib/systemd/system/jenkins.service; enabled)
Active: active (running) since Mon 2025-xx-xx xx:xx:xx CST
Docs: https://jenkins.io/doc/
Main PID: 12345 (java)
Tasks: 44 (limit: 4618)
Memory: 356.0M
CPU: 12.345s
CGroup: /system.slice/jenkins.service
└─12345 /usr/bin/java -jar /usr/share/java/jenkins.war ...

**关键看 Active: active (running)**,如果 Jenkins 没有运行:

1
2
3
4
5
6
7
8
# 启动 Jenkins
sudo systemctl start jenkins

# 设置开机自启
sudo systemctl enable jenkins

# 如果启动失败,查看错误日志
sudo journalctl -u jenkins -f
1
2
# 第二步:确认端口已监听
sudo ss -tlnp | grep 8080

输出应该类似:

1
LISTEN 0      50        *:8080        *:*    users:(("java",pid=11122,fd=9))     
1
2
# 第三步:获取初始管理员密码
sudo cat /var/lib/jenkins/secrets/initialAdminPassword

输出是一串密码,类似:

1
a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6

把这个密码复制下来,下一步要用。如果这个文件不存在,说明 Jenkins 可能已经完成过初始化。

1
2
3
4
5
6
7
8
9
# 第四步:检查防火墙(如果虚拟机开启了防火墙)
# Ubuntu/Debian
sudo ufw status
sudo ufw allow 8080/tcp

# CentOS/RHEL
sudo firewall-cmd --list-ports
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload

3.2 浏览器访问 Jenkins

1
2
3
4
5
6
7
8
打开你的浏览器,访问:

http://<虚拟机IP地址>:8080

如何查看虚拟机 IP:
├── 在虚拟机中执行:ip addr 或 ifconfig
├── 找到类似 192.168.x.x 或 10.x.x.x 的地址
└── 如果是 NAT 模式,可能需要配置端口转发

你会看到解锁 Jenkins 的页面:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
┌─────────────────────────────────────────┐
│ │
│ 🔓 Unlock Jenkins │
│ │
│ Jenkins 自动创建了一个初始密码, │
│ 请复制下面的密码并粘贴到此处。 │
│ │
│ 密码文件路径: │
│ /var/lib/jenkins/secrets/ │
│ initialAdminPassword │
│ │
│ ┌─────────────────────────────────┐ │
│ │ │ │
│ └─────────────────────────────────┘ │
│ │
│ [ Continue ] │
│ │
└─────────────────────────────────────────┘

把刚才获取的密码粘贴进去,点击 Continue

3.3 安装插件

接下来你会看到插件安装页面:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
┌─────────────────────────────────────────┐
│ │
│ Customize Jenkins │
│ │
│ 安装建议的插件,或者选择特定的插件。 │
│ │
│ ┌───────────────────┐ │
│ │ Install suggested │ ← 推荐选这个 │
│ │ plugins │ │
│ └───────────────────┘ │
│ │
│ ┌───────────────────┐ │
│ │ Select plugins │ ← 高级用户 │
│ │ to install │ 可以自选 │
│ └───────────────────┘ │
│ │
└─────────────────────────────────────────┘

选择 Install suggested plugins(安装推荐插件)。

推荐插件包括了 Git、Pipeline、SSH 等常用功能,后续可以随时再安装其他插件。

安装过程页面:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
┌─────────────────────────────────────────┐
│ │
│ Getting Started │
│ │
│ Installing Plugins... │
│ │
│ ████████████████░░░░░░░░ 67% │
│ │
│ ✅ Git │
│ ✅ Pipeline │
│ ✅ Credentials │
│ ⏳ SSH Build Agents │
│ ⏳ Mailer │
│ ⏳ Workspace Cleanup │
│ ○ LDAP │
│ ○ ... │
│ │
└─────────────────────────────────────────┘

耐心等待所有插件安装完成(通常需要 3-10 分钟,取决于网络速度)。

如果有些插件安装失败:

  • 不用担心,可以后续手动安装
  • 点击 Continue 即可跳过

3.4 创建管理员账号

插件安装完成后,进入创建管理员页面:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
┌─────────────────────────────────────────┐
│ │
│ Create First Admin User │
│ │
│ Username: [ ] │
│ │
│ Password: [ ] │
│ │
│ Confirm [ ] │
│ Password: │
│ │
│ Full Name: [ ] │
│ │
│ E-mail: [ ] │
│ Address: │
│ │
│ [ Save and Continue ] │
│ │
│ ── 或者跳过,使用 admin 账户 ── │
│ │
└─────────────────────────────────────────┘

强烈建议创建自己的管理员账号,填写示例:

1
2
3
4
5
Username:     admin          (或你喜欢的用户名)
Password: YourStr0ngP@ss (设置一个强密码)
Confirm: YourStr0ngP@ss
Full Name: Administrator
E-mail: admin@example.com

记住这个密码! 这是你以后登录 Jenkins 的凭据。

3.5 配置实例 URL

接下来是配置 Jenkins URL:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
┌─────────────────────────────────────────┐
│ │
│ Instance Configuration │
│ │
│ Jenkins URL: │
│ ┌─────────────────────────────────┐ │
│ │ http://192.168.1.100:8080/ │ │
│ └─────────────────────────────────┘ │
│ │
│ 这个 URL 将用于: │
│ - 邮件通知中的链接 │
│ - Webhook 回调地址 │
│ - 构建日志的访问链接 │
│ │
│ [ Save and Finish ] │
│ │
└─────────────────────────────────────────┘

把 URL 中的地址改成你虚拟机的实际 IP 地址:

1
http://<你的虚拟机IP>:8080/

不要用 localhost,因为后续 Git Webhook 等外部服务需要通过 IP 访问 Jenkins。

点击 Save and Finish

3.6 Jenkins 就绪

1
2
3
4
5
6
7
8
9
┌─────────────────────────────────────────┐
│ │
│ 🎉 Jenkins is ready! │
│ │
Jenkins 已经准备就绪。 │
│ │
│ [ Start using Jenkins ] │
│ │
└─────────────────────────────────────────┘

点击 Start using Jenkins,进入 Jenkins 主界面。


四、Jenkins Web UI 界面详解

4.1 主界面(Dashboard)

进入后你会看到 Jenkins 的主界面(Dashboard):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
┌──────────────────────────────────────────────────────────────────┐
│ 🔵 Jenkins admin ▼ │
├──────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ │
│ │ Jenkins │ ← 左上角是 Jenkins logo,点击回到主页 │
│ └──────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ Welcome to Jenkins! │ │
│ │ │ │
│ │ 初始页面是空的,因为还没有创建任何项目 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ 左侧导航栏: │
│ ├── 📋 New Item — 创建新项目 │
│ ├── 📊 People — 查看用户列表 │
│ ├── 📂 Build History — 查看构建历史 │
│ ├── 🔍 My Views — 我的视图 │
│ ├── ⚙️ Manage Jenkins — 管理 Jenkins(最重要的管理入口)
│ └── 📚 My Views — 自定义视图 │
│ │
└──────────────────────────────────────────────────────────────────┘

4.2 左侧导航栏各功能详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
New Item(新建项目)
├── 创建一个新的构建任务
├── 支持多种项目类型(后面详细介绍)
└── 快捷键:N

People(用户)
├── 查看所有 Jenkins 用户
├── 查看用户权限
└── 管理用户信息

Build History(构建历史)
├── 显示最近的构建记录
├── 可以查看构建状态(成功/失败)
└── 点击进入具体构建详情

Manage Jenkins(管理 Jenkins) ⭐ 最重要
├── 系统配置
├── 安全配置
├── 插件管理
├── 工具配置
├── 节点管理
└── ...(所有管理功能都在这里)

My Views(我的视图)
├── 自定义项目分组视图
└── 可以按项目、团队、环境等维度组织

4.3 Manage Jenkins(管理页面)详解

点击 Manage Jenkins,这是你以后最常访问的管理页面:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
┌─────────────────────────────────────────────────────────────────┐
│ │
│ Manage Jenkins │
│ │
System(系统) │
│ ├── ⚙️ System — 全局系统配置 │
│ ├── 🔧 Tools — 全局工具配置(JDK、Maven、Node等) │
│ ├── 🔌 Plugins — 插件管理 │
│ ├── 👤 Users — 用户管理 │
│ └── 📋 About — Jenkins 版本信息 │
│ │
Security(安全) │
│ ├── 🔒 Configure Global Security — 全局安全配置 │
│ ├── 🔑 Manage Credentials — 凭据管理(密码、密钥等) │
│ ├── 👥 Configure Global Security — 权限矩阵 │
│ └── 📜 Security — 安全相关设置 │
│ │
│ Status Information(状态信息) │
│ ├── 📊 System Information — 系统信息(Java 版本、OS 等) │
│ ├── 📊 System Log — 系统日志 │
│ └── 📊 Load Statistics — 负载统计 │
│ │
│ Tools and Actions(工具和操作) │
│ ├── 🖥️ Nodes — 节点管理(Agent 管理) │
│ ├── 📂 Manage Old Data — 管理旧数据 │
│ ├── 🔄 Reload Configuration — 重新加载配置 │
│ └── 🗑️ Prepare Shutdown — 准备关闭 │
│ │
└─────────────────────────────────────────────────────────────────┘

4.4 重点模块逐一讲解

4.4.1 System(全局系统配置)

路径:Manage Jenkins → System

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
全局系统配置中你需要关注的设置:

Jenkins Location(Jenkins 位置)
├── Jenkins URL:http://192.168.1.100:8080/
├── System Admin e-mail Address:管理员邮箱
└── 这个 URL 会用于邮件通知中的链接

GitHub(如果安装了 GitHub 插件)
├── GitHub Server 配置
└── API Rate Limiting

邮件通知(Email Notification)
├── SMTP 服务器配置
├── 发件人地址
└── 测试邮件发送

Extended E-mail Notification(如果安装了 Email Extension 插件)
├── 更丰富的邮件模板配置
└── 支持 HTML 邮件

ShellShell 执行器)
├── 默认 Shell:/bin/bash
└── 可以根据需要修改

现在先不要修改任何配置,只是浏览一下,了解有哪些选项。

4.4.2 Tools(全局工具配置)

路径:Manage Jenkins → Tools

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
全局工具配置中需要关注:

JDK 安装
├── 可以自动安装(Jenkins 会自动下载)
├── 或者指定已有 JDK 的路径
└── 可以配置多个 JDK 版本(JDK8、JDK11、JDK17)

Git 安装
├── 通常系统已有 Git
├── 可以指定路径:/usr/bin/git
└── 或让 Jenkins 自动安装

Maven 安装
├── 指定 Maven 安装路径
└── 或自动安装

NodeJS 安装(如果安装了 NodeJS 插件)
├── 指定 Node.js 版本
└── 自动安装

验证你的系统中已安装的工具:

1
2
3
4
5
6
7
8
9
10
11
# 检查 Java 版本
java -version

# 检查 Git 版本
git --version

# 检查 Maven 版本(如果有)
mvn --version

# 检查 Node.js 版本(如果有)
node --version

把查到的路径记录下来,后面配置时要用。

4.4.3 Plugins(插件管理)

路径:Manage Jenkins → Plugins

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
插件管理界面包含四个标签页:

Updates(更新)
├── 显示有更新可用的插件
└── 可以选择性更新

Available plugins(可用插件)
├── 浏览和搜索可安装的插件
├── 搜索框可以快速查找
└── 勾选后点击 Install 即可

Installed plugins(已安装插件)
├── 查看所有已安装的插件
├── 可以禁用或卸载插件
└── 查看插件版本

Advanced settings(高级设置)
├── 手动上传 .hpi 插件文件
├── 配置代理(如果需要翻墙下载插件)
└── 更新站点 URL

4.4.4 Credentials(凭据管理)

路径:Manage Jenkins → Credentials

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
凭据管理是 Jenkins 安全体系的核心:

凭据类型:
├── Username with password — 用户名密码
│ 用于:Git 仓库登录、数据库连接、API 调用

├── SSH Username with private key — SSH 密钥
│ 用于:SSH 登录服务器、Git SSH 克隆

├── Secret file — 秘密文件
│ 用于:证书文件、配置文件

├── Secret text — 秘密文本
│ 用于:API Token、密钥字符串

└── Certificate — 证书
用于:HTTPS 客户端证书

凭据作用域(Scope):
├── Global(全局)— 所有项目都可以使用
└── System(系统)— 仅 Jenkins 系统内部使用

现在先了解概念,后面 Day 3-4 会实际配置。

4.4.5 Nodes(节点管理)

路径:Manage Jenkins → Nodes

1
2
3
4
5
6
7
8
9
10
11
12
13
节点管理界面:

你会看到一个名为 "Built-In Node" 的节点
├── 这是 Jenkins 的内置节点(Master 本身)
├── 默认情况下,所有构建都在这个节点上执行
└── 后续可以添加更多 Agent 节点

每个节点显示:
├── 节点名称
├── 状态(在线/离线)
├── 磁盘剩余空间
├── 响应时间
└── 当前正在执行的任务数

五、理解 Jenkins 项目类型

5.1 创建新项目

点击左侧 New Item,你会看到 Jenkins 支持的项目类型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
┌─────────────────────────────────────────────────────────────────┐
│ │
│ New Item │
│ │
│ Enter an item name: [ ] │
│ │
│ 选择项目类型: │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Freestyle │ │ Pipeline │ │ Multi- │ │
│ │ project │ │ │ │ config │ │
│ │ │ │ 最灵活的项目 │ │ project │ │
│ │ 最简单的 │ │ 类型,用 │ │ │ │
│ │ 项目类型, │ │ 代码定义 │ │ 参数化构建 │ │
│ │ 用 UI 配置 │ │ 流水线 │ │ 矩阵 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Folder │ │ Multibranch │ │ Organization│ │
│ │ │ │ Pipeline │ │ Folder │ │
│ │ 文件夹, │ │ │ │ │ │
│ │ 用于组织 │ │ 多分支 │ │ 组织级别 │ │
│ │ 项目 │ │ 流水线 │ │ 项目扫描 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘

5.2 三种最重要的项目类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1. Freestyle Project(自由风格项目)
├── 最基础的项目类型
├── 通过 Web UI 点点点来配置
├── 适合:初学者入门、简单任务
├── 优点:简单直观
├── 缺点:配置无法版本化管理,复杂流程难以表达
└── 我们 Day 3-4 会用这个来入门

2. Pipeline(流水线项目)
├── 用代码(Jenkinsfile)定义整个构建流程
├── Jenkinsfile 存放在 Git 仓库中
├── 适合:所有正式项目
├── 优点:可版本化、可复用、可 Code Review
├── 缺点:需要学习 Groovy 语法
└── 这是我们重点学习的目标

3. Multibranch Pipeline(多分支流水线)
├── 自动扫描 Git 仓库的所有分支
├── 每个分支自动创建对应的 Pipeline
├── 适合:有多个分支的团队项目
├── 优点:分支管理自动化
└── Week 3 会详细讲解

六、动手实操 — 创建你的第一个项目

6.1 创建一个 Freestyle 项目

Step 1: 点击左侧 New Item

Step 2: 输入项目名称 hello-jenkins,选择 Freestyle project,点击 OK

Step 3: 在项目配置页面,做以下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
General(常规)
├── Description: 我的第一个 Jenkins 项目
└── 其他保持默认

Source Code Management(源码管理)
└── 选择 None(暂时不关联代码仓库)

Build Triggers(构建触发器)
└── 暂时不配置任何触发器

Build Environment(构建环境)
└── 暂时不配置

Build Steps(构建步骤)
├── 点击 "Add build step"
├── 选择 "Execute shell"
└── 在命令框中输入:

echo "========================================"
echo " 这是我的第一个 Jenkins 构建!"
echo " 构建时间: $(date)"
echo " 构建号: ${BUILD_NUMBER}"
echo " 工作空间: ${WORKSPACE}"
echo " 执行节点: ${NODE_NAME}"
echo "========================================"
echo ""
echo "Hello, Jenkins! 🎉"

Post-build Actions(构建后操作)
└── 暂时不配置

最后点击 [ Save ]

Step 4: 点击左侧 Build Now(立即构建)

Step 5:Build History 中看到一个构建记录,点击它,然后点击 Console Output(控制台输出)

你应该看到类似这样的输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Started by user admin
Running as SYSTEM
Building in /var/lib/jenkins/workspace/hello-jenkins
[hello-jenkins] $ /bin/bash /tmp/jenkins1234567890.sh
========================================
这是我的第一个 Jenkins 构建!
构建时间: Mon Jul 14 10:30:00 CST 2025
构建号: 1
工作空间: /var/lib/jenkins/workspace/hello-jenkins
执行节点: built-in
========================================

Hello, Jenkins! 🎉
Finished: SUCCESS

恭喜!你已经成功完成了第一个 Jenkins 构建!

6.2 理解构建过程中发生了什么

1
2
3
4
5
6
7
8
9
10
11
当你点击 "Build Now" 时:

1. Jenkins 创建一个构建任务,编号为 #1
2. 任务进入队列
3. Jenkins 找到一个空闲的 Agent(这里就是 Master 本身)
4. Agent 创建一个工作空间目录:
/var/lib/jenkins/workspace/hello-jenkins/
5. Agent 执行你配置的 Shell 命令
6. 所有输出实时传回 Jenkins
7. 命令执行完毕,构建状态设为 SUCCESS
8. 构建记录保存到 Jenkins 数据目录

6.3 查看 Jenkins 的工作空间

1
2
3
4
5
6
7
8
# 在虚拟机中查看 Jenkins 的工作空间
ls -la /var/lib/jenkins/workspace/

# 你会看到
# drwxr-xr-x 2 jenkins jenkins 4096 ... hello-jenkins

# 查看工作空间内容
ls -la /var/lib/jenkins/workspace/hello-jenkins/

6.4 再次构建,观察变化

1
2
3
4
5
6
再次点击 "Build Now",你会发现:

1. 构建号变成了 #2
2. 工作空间路径不变
3. 每次构建会覆盖之前的工作空间内容(默认行为)
4. 构建历史中显示两个构建记录

七、关键环境变量

Jenkins 在构建过程中会自动注入很多环境变量,这些变量在编写构建脚本时非常有用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
常用环境变量:

构建信息
├── BUILD_NUMBER — 构建号(1, 2, 3...)
├── BUILD_ID — 构建 ID(时间戳格式)
├── BUILD_DISPLAY_NAME — 构建显示名称(#1, #2...)
├── BUILD_URL — 构建页面 URL
└── BUILD_TAG — 构建标签(jenkins-jobname-1)

项目信息
├── JOB_NAME — 项目名称
├── JOB_URL — 项目 URL
└── JOB_BASE_NAME — 项目短名称

节点信息
├── NODE_NAME — 执行构建的节点名称
├── NODE_LABELS — 节点标签
└── WORKSPACE — 工作空间路径

Git 信息(如果配置了 Git)
├── GIT_BRANCH — 当前分支
├── GIT_COMMIT — 当前提交 SHA
├── GIT_PREVIOUS_COMMIT — 上一次提交 SHA
└── GIT_URL — Git 仓库 URL

验证这些变量 — 修改你的 Shell 脚本:

1
2
3
4
5
6
7
8
echo "========== 构建信息 =========="
echo "构建号: ${BUILD_NUMBER}"
echo "构建 ID: ${BUILD_ID}"
echo "项目名称: ${JOB_NAME}"
echo "工作空间: ${WORKSPACE}"
echo "节点名称: ${NODE_NAME}"
echo "构建 URL: ${BUILD_URL}"
echo "=============================="

八、Day 1-2 自检清单

完成以下所有项目,确认你已经掌握了 Day 1-2 的内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
环境验证
├── [/] Jenkins 服务正常运行(systemctl status jenkins)
├── [/] 能通过浏览器访问 Jenkins(http://IP:8080)
├── [/] 已完成初始解锁和管理员账号创建
└── [/] 推荐插件已安装完成

界面熟悉
├── [/] 能找到 Dashboard(主界面)
├── [/] 能找到 Manage Jenkins(管理页面)
├── [/] 能找到 System Configuration(系统配置)
├── [/] 能找到 Tools Configuration(工具配置)
├── [/] 能找到 Plugins(插件管理)
├── [/] 能找到 Credentials(凭据管理)
├── [/] 能找到 Nodes(节点管理)
└── [/] 能找到 Build History(构建历史)

概念理解
├── [ ] 能用自己的话解释 CI/CD 是什么
├── [/] 理解 Master 和 Agent 的区别
├── [/] 理解构建的生命周期(触发→排队→执行→完成)
├── [ ] 知道 Jenkins 支持哪些项目类型
├── [ ] 知道至少 5 个 Jenkins 环境变量

实操完成
├── [/] 成功创建了 hello-jenkins 项目
├── [/] 成功执行了第一次构建
├── [/] 能查看控制台输出
├── [/] 理解工作空间(Workspace)的概念
└── [/] 能找到 Jenkins 的数据目录(/var/lib/jenkins/)

九、常见问题排查

Q1:浏览器打不开 Jenkins 页面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 1. 确认 Jenkins 运行中
sudo systemctl status jenkins

# 2. 确认端口已监听
sudo ss -tlnp | grep 8080

# 3. 确认防火墙放行
sudo ufw allow 8080/tcp # Ubuntu
# 或
sudo firewall-cmd --permanent --add-port=8080/tcp && sudo firewall-cmd --reload # CentOS

# 4. 确认虚拟机网络模式
# NAT 模式需要配置端口转发
# 桥接模式直接用虚拟机 IP 访问
# Host-Only 模式只能宿主机访问

# 5. 查看 Jenkins 日志
sudo journalctl -u jenkins -f

Q2:初始密码文件不存在

1
2
3
4
5
6
7
8
9
10
11
12
13
# 可能 Jenkins 已经初始化过了
# 查看 Jenkins 是否已经配置过
ls -la /var/lib/jenkins/config.xml

# 如果存在,说明已经初始化过
# 可以尝试默认用户名 admin,或者重置密码

# 重置密码方法:
# 1. 编辑配置文件,禁用安全
sudo sed -i 's/<useSecurity>true/<useSecurity>false/' /var/lib/jenkins/config.xml
# 2. 重启 Jenkins
sudo systemctl restart jenkins
# 3. 无需密码即可进入,然后重新配置安全

Q3:插件安装失败

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 方法一:更换插件更新源
# Manage Jenkins → Plugins → Advanced settings
# Update Site URL 改为国内镜像:
# https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

# 方法二:手动下载安装
# 访问 https://plugins.jenkins.io/ 搜索插件
# 下载 .hpi 文件
# Manage Jenkins → Plugins → Advanced → Upload Plugin
# 上传 .hpi 文件

# 方法三:命令行安装
# 下载 jenkins-plugin-manager.jar
wget https://github.com/jenkinsci/plugin-management-cli/releases/latest/download/jenkins-plugin-manager.jar
java -jar jenkins-plugin-manager.jar \
--war /usr/share/java/jenkins.war \
--plugin-download-directory /var/lib/jenkins/plugins/ \
--plugins git pipeline workflow-aggregator
sudo systemctl restart jenkins

Q4:Jenkins 内存不足

1
2
3
4
5
6
7
8
9
10
11
12
13
# 查看 Jenkins 进程内存使用
ps aux | grep jenkins

# 修改 JVM 内存参数
sudo vim /etc/default/jenkins # Debian/Ubuntu
# 或
sudo vim /etc/sysconfig/jenkins # CentOS/RHEL

# 找到 JAVA_OPTS 行,修改为:
JAVA_OPTS="-Xms512m -Xmx1024m"

# 重启 Jenkins
sudo systemctl restart jenkins

十、下一步预告

1
2
3
4
5
6
7
8
Day 3-4 学习内容预告:

├── 准备一个本地 Git 仓库作为练习项目
├── 创建第一个 Freestyle 项目并关联 Git
├── 配置构建触发器(手动、定时、轮询)
├── 配置构建后操作(归档产物、邮件通知)
├── 实际体验完整的"拉取代码→构建→测试"流程
└── 为 Week 2 的 Pipeline 学习打下基础

Jenkins Day 1-2 学习笔记
http://bote798.github.io/2026/04/02/Jenkins Day 1-2 学习笔记/
作者
bote798
发布于
2026年4月2日
更新于
2026年4月2日
许可协议