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 找一个空闲的 Agent3 . 分配(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 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 202 5-xx-xx xx:xx:xx CST Docs: https:// jenkins.io/ doc/ Main PID: 12345 (java) Tasks: 44 (limit: 4618 ) Memory: 356.0 M CPU: 12.345 s 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 sudo systemctl start jenkinssudo systemctl enable jenkinssudo 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 sudo ufw statussudo ufw allow 8080/tcpsudo firewall-cmd --list-portssudo firewall-cmd --permanent --add-port=8080/tcpsudo 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 地址:
不要用 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: ├── System Admin e-mail Address:管理员邮箱 └── 这个 URL 会用于邮件通知中的链接 GitHub(如果安装了 GitHub 插件) ├── GitHub Server 配置 └── API Rate Limiting 邮件通知(Email Notification) ├── SMTP 服务器配置 ├── 发件人地址 └── 测试邮件发送 Extended E-mail Notification(如果安装了 Email Extension 插件) ├── 更丰富的邮件模板配置 └── 支持 HTML 邮件Shell (Shell 执行器) ├── 默认 Shell :/bin/bash └── 可以根据需要修改
现在先不要修改任何配置,只是浏览一下,了解有哪些选项。
路径: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 -version git --version mvn --version 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 创建一个构建任务,编号为 #12. 任务进入队列3. Jenkins 找到一个空闲的 Agent(这里就是 Master 本身)4. Agent 创建一个工作空间目录: /var/lib/jenkins/workspace/hello-jenkins/5. Agent 执行你配置的 Shell 命令6. 所有输出实时传回 Jenkins7. 命令执行完毕,构建状态设为 SUCCESS8. 构建记录保存到 Jenkins 数据目录
6.3 查看 Jenkins 的工作空间 1 2 3 4 5 6 7 8 ls -la /var/lib/jenkins/workspace/ls -la /var/lib/jenkins/workspace/hello-jenkins/
6.4 再次构建,观察变化 1 2 3 4 5 6 再次点击 "Build Now",你会发现:1. 构建号变成了 #22. 工作空间路径不变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 — 构建显示名称( ├── 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 sudo systemctl status jenkinssudo ss -tlnp | grep 8080sudo ufw allow 8080/tcp sudo firewall-cmd --permanent --add-port=8080/tcp && sudo firewall-cmd --reload sudo journalctl -u jenkins -f
Q2:初始密码文件不存在 1 2 3 4 5 6 7 8 9 10 11 12 13 ls -la /var/lib/jenkins/config.xmlsudo sed -i 's/<useSecurity>true/<useSecurity>false/' /var/lib/jenkins/config.xmlsudo systemctl restart jenkins
Q3:插件安装失败 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 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-aggregatorsudo systemctl restart jenkins
Q4:Jenkins 内存不足 1 2 3 4 5 6 7 8 9 10 11 12 13 ps aux | grep jenkinssudo vim /etc/default/jenkins sudo vim /etc/sysconfig/jenkins JAVA_OPTS="-Xms512m -Xmx1024m" sudo systemctl restart jenkins
十、下一步预告 1 2 3 4 5 6 7 8 Day 3-4 学习内容预告: ├── 准备一个本地 Git 仓库作为练习项目 ├── 创建第一个 Freestyle 项目并关联 Git ├── 配置构建触发器(手动、定时、轮询) ├── 配置构建后操作(归档产物、邮件通知) ├── 实际体验完整的"拉取代码→构建→测试" 流程 └── 为 Week 2 的 Pipeline 学习打下基础