1. DevOps概念
前言
1️⃣ DevOps 的定义
DevOps = Development + Operations
- Development(开发):程序员写代码,做新功能
- Operations(运维):把代码部署到服务器,保证系统稳定运行
DevOps 的核心目标:让开发和运维不再是两个孤立部门,而是一个整体团队,通过自动化和协作快速交付高质量软件。
简单理解:以前开发写好代码 → 运维部署 → 出问题 → 两边互推责任

DevOps 就是:开发和运维一起做,快速、稳定、自动化。

2️⃣ DevOps 的特点
| 特点 | 解释 |
|---|---|
| 持续集成(CI) | 每次开发提交代码,系统自动编译、测试,确保不会破坏现有功能 |
| 持续交付/部署(CD) | 代码测试通过后,可以快速、安全地部署到生产环境 |
| 自动化 | 构建、测试、部署、监控尽量自动化,减少人为错误 |
| 协作文化 | 开发、测试、运维一条心,互相理解、互相支持 |
| 反馈循环快 | 系统监控 → 问题及时发现 → 反馈到开发 → 快速修复 |
3️⃣ DevOps 的常用工具

| 工具 | 功能 | 示例 |
|---|---|---|
| Git | 版本控制 | 管理代码历史,团队协作 |
| Maven / Gradle | 构建工具 | 编译、打包、依赖管理 |
| Jenkins / GitLab CI | 自动化构建和部署 | 持续集成/持续部署 |
| Docker / Kubernetes | 容器化与部署 | 隔离环境,快速发布 |
| JMeter / Selenium | 测试工具 | 压力测试、功能测试 |
| Prometheus / Grafana | 监控 | 系统运行状态、性能可视化 |
4️⃣ DevOps 的工作流程示意

5️⃣ 举个生活类比
你可以把 DevOps 想象成快餐店:
- 开发:厨师做菜
- 运维:服务员把菜送到顾客桌上
- DevOps:厨师 + 服务员紧密配合,厨房设备自动化,菜品快速、高质量出餐
- 结果:顾客满意 → 店铺运营顺畅
2. DevOps实践
2.1 环境准备
前言
1️⃣ 1. 安装JDK17,并且配置环境变量(这个操作之前说过很多次,这里不再赘述)


2️⃣ 2. 安装Maven,并且配置环境变量(之前将实训的时候,使用的3.9.4版本)

3️⃣ 3. 安装Git
Git 是一个 版本控制系统(VCS),用来管理代码的历史记录。
核心作用:
版本管理 :记录每一次代码改动,能随时回到以前的版本。
协作开发 :多人同时开发同一个项目,不会覆盖彼此代码。
备份与分支:可以创建分支做新功能开发,完成后合并,不影响主线代码。

简单比喻:
把你的代码看成一个文档,每次修改后 Git 都会存一个“快照”,需要时可以恢复。
分支就像“平行工作空间”,不同功能可以同时开发,最后再合并到主分支。
4️⃣ 4. 准备SpringBoot项目源码

将项目使用Idea打开,并且运行成功,以备后用

2.2 安装Git
前言
下载地址: https://git-scm.com/download

下载完成后得到安装文件:
直接双击完成安装即可非中文目录,安装完成后可以在任意目录下点击鼠标右键,如果能够看到如下菜单则说明安装成功: 🎉 🎉

Git GUI Here:打开Git 图形界面新手实用

Git Bash Here:打开Git 命令行 企业实用

Git安装目录结构如下:了解一下

Git全局设置
安装好git后,在命令行或终端中使用下面的命令可以设置git自己的名字和电子邮件。这是因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址可以随意设置。
这是非常重要的,因为每次Git提交都会使用该用户信息。在Git 命令行中执行下面命令:
设置用户信息
# 设置用户名,可以自行设置
git config --global user.name "yangeit"
# 设置用户的邮箱,建议配置工作邮箱
git config --global user.email "yangeit@qq.com"查看配置信息
git config --list
注意:上面设置的user.name和user.email并不是我们在注册码云账号时使用的用户名和邮箱,此处可以任意设置。
3. Git代码托管服务
Git中存在两种类型的仓库,即本地仓库和远程仓库。那么我们如何搭建Git远程仓库呢?
我们可以借助互联网上提供的一些代码托管服务来实现,其中比较常用的有GitHub、码云、GitLab等。
| 名称 | 网址 | 说明 |
|---|---|---|
| gitHub | https://github.com/ | 一个面向开源及私有软件项目的托管平台,因为只支持Git 作为唯一的版本库格式进行托管,故名gitHub |
| 码云 | https://gitee.com/ | 国内的一个代码托管平台,由于服务器在国内,所以相比于GitHub,码云速度会更快 |
| GitLab | https://about.gitlab.com/ | 一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务 |
| BitBucket | https://bitbucket.org/ | 一家源代码托管网站,采用Mercurial和Git作为分布式版本控制系统,同时提供商业计划和免费账户 |
3.2.3 创建远程仓库
登录成功后可以创建远程仓库,操作方式如下:

页面跳转到新建仓库页面:

解释说明:
仓库名称:必填,每个仓库都需要有一个名称,同一个码云账号下的仓库名称不能重复
路径:访问远程仓库时会使用到,一般无需手动指定,和仓库名称自动保持一致
开源:所有人都可以查看此仓库
私有:只有此仓库的成员可见,其他人不可见
创建完成后可以查看仓库信息:

注意:每个Git远程仓库都会对应一个网络地址,点击【克隆/下载】按钮,在弹出窗口点击【复制】按钮即可复制网络地址,地址如下:
3.2.4 邀请其他用户成为仓库成员
前面已经在码云上创建了自己的远程仓库,目前仓库成员只有自己一个人(身份为管理员)。在企业实际开发中,一个项目往往是由多个人共同开发完成的,为了使多个参与者都有权限操作远程仓库,就需要邀请其他项目参与者成为当前仓库的成员。
点击管理按钮进入仓库管理页面,左侧菜单中可以看到【仓库成员管理】:

点击【开发者】菜单,跳转到如下页面:

点击【添加仓库成员】菜单下的【邀请用户】菜单,跳转到如下页面:

可以看到邀请用户有多种方式:链接邀请、直接添加、通过仓库邀请成员
注意:被邀请用户必须为码云的注册用户,否则无法成为仓库成员
总结
课堂作业
- Git是什么?有什么作用?仓库分为几种?
- gitee是什么?有什么作用?
- 创建gitee的账户,创建一个仓库(名字非中文)
2.3 同步代码到码云
前言
前置条件
- 已经安装 Git 并配置用户名邮箱(否则看上一步 Git 入门):
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"- 有一个 Gitee 账号(注册地址:https://gitee.com)

- 已经在 IDEA 中打开你的 SpringBoot 项目
步骤 1:在 Gitee 创建仓库
登录 Gitee → 点击右上角 “+” → 选择 新建仓库
填写仓库信息:
- 仓库名称:
DevOps案例(自己取) - 描述:可写
DevOps案例,湖南女子学院23级计科教学项目 - 公开/私有:选择 公开
- 仓库名称:
点击 创建
创建成功后,会显示 仓库地址:

- HTTPS 示例:
https://gitee.com/huhu520/dev-ops-case-study.git - SSH 示例:
git@gitee.com:huhu520/dev-ops-case-study.git

这里我们用 HTTPS 方法,操作更简单,初学者易理解
步骤 2:在 IDEA 中打开 Git
打开项目 → File → Settings → Version Control → Git
- Path to Git executable: 确认 Git 安装路径(Windows 默认:
C:\javasoftware\Git\cmd\git.exe) - 点击 Test → 显示
Git version is 2.24.0即可
- Path to Git executable: 确认 Git 安装路径(Windows 默认:

确认项目已绑定 Git:
- VCS → Enable Version Control Integration → Git → OK


idea目录中文件名出现红色表示未提交到本地仓库,绿色表示已提交到本地仓库
大家注意了,不是所有的文件需要提交,需要管理,如.idea文件夹,如target目录中的文件,因此需要创建 .gitignore 文件
在项目根目录下新建一个文本文件,命名为:.gitignore
内容如下:
# ========================
# IDEA / IntelliJ 文件
# ========================
.idea/
*.iml
*.iws
out/
# ========================
# Maven / Java 编译文件
# ========================
target/
*.class
*.jar
*.war
# ========================
# 日志文件
# ========================
*.log
# ========================
# 操作系统文件
# ========================
.DS_Store
Thumbs.db
# ========================
# SpringBoot 生成的配置或临时文件
# ========================
spring.log
步骤 3:将项目提交到本地 Git 仓库
- 打开 IDEA 右上角 VCS 工具栏 → Commit (Ctrl+K)
- 勾选所有文件 → 写 commit 信息,例如:
first commit - 初始化 SpringBoot 项目- 点击 Commit(可以勾选 Commit and Push,下一步一起推送)

步骤 4:绑定远程 Gitee 仓库
- 打开 IDEA 右上角 VCS 工具栏 → Git → Remotes

说明:
origin是远程仓库名字,默认用 origin- URL 换成你在 Gitee 仓库页面复制的 HTTPS 地址

步骤 5:推送本地代码到 Gitee
IDEA 界面操作:
- VCS → Git → Push
- 选择
origin,分支main→ 点击 Push


- 第一次推送会要求输入 Gitee 账号 + 密码/Token
- 输入完成后,本地代码就同步到 Gitee 仓库了
步骤 6:检查
- 打开浏览器 → Gitee 仓库地址
- 页面应该能看到你项目的所有文件

以后每次修改项目:
git add . git commit -m "修改说明" git push origin main
当然在 IDEA 中也可以直接点击 commit 和 push 就可以了。
2.4 编写JMeter 测试计划
前言
GUI 创建线程组:
- Number of Threads:10
- Ramp-Up:5 秒
- Loop Count:1
添加 HTTP Request:
- Server:localhost
- Port:8481
- Path:/api/demo/slow
- Method:GET
添加 Listener → Summary Report 或 View Results in Table
保存文件:jmeter_test.jmx
注意:GUI 方式测试前,SpringBoot 服务需先启动

2.5 安装Jenkins
前言

接下里安装Jenkins,Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,广泛用于项目持续集成。
资料准备:

1️⃣ 安装 Jenkins
在当前目录下cmd,然后执行 java -jar jenkins2541.war 启动Jenkins,启动成功后,访问 http://localhost:8080 即可看到Jenkins的界面。
默认 Jenkins 会启动 Windows 服务,端口为 8080
注意: 考虑到下载插件速度过慢,这里焱哥直接提供插件包
- 执行
java -jar jenkins2541.war启动 Jenkins - 访问 http://localhost:8080
- 等待初始化完成,然后选择自定义安装插件,然后选择无,这样就不会安装插件了,直接下一步
- 输入管理员账号密码,然后点击保存并完成(这里就admin和admin)
- 地址栏输入 http://localhost:8080,使用默认的就可以
- 点击确认后,访问 http://localhost:8080,输入账号密码,点击登录,登录成功后,点击开始使用
- Ctrl + C 停止 Jenkins,将plugins压缩包解压到 .\jenkins\plugins 目录下,然后再次启动 Jenkins,访问 http://localhost:8080





2️⃣ Jenkins 初始界面
Dashboard(主页):
- New Item:创建新任务
- Build Now:立即构建
- Manage Jenkins:全局配置
- People:用户管理
菜单栏:
- Dashboard → New Item → Pipeline:创建流水线
3️⃣ 配置全局工具

为了流水线自动化构建 SpringBoot 项目,需要配置 JDK、Maven、Git
点击 Manage Jenkins → Global Tool Configuration
JDK:
- Name:
JDK17 - JAVA_HOME:你的 JDK 安装路径,例如
C:\Java\jdk-17
- Name:

Maven:
- Name:
Maven3 - MAVEN_HOME:Maven 安装路径,例如
C:\apache-maven-3.9.6
- Name:

Git:
- Name:
Git - Path to Git executable:例如
C:\Program Files\Git\bin\git.exe
- Name:
点击 Save

然后记得点击下面的保存
2.6 创建第一个流水线
前言
- 点击 Dashboard → New Item
- 输入名字,例如
SpringBoot-DevOps-Pipeline - 选择 Pipeline → 点击 OK

配置流水线脚本


在 Pipeline 脚本中填入:
pipeline {
agent any
tools {
jdk 'JDK17'
maven 'Maven3'
}
environment {
JMETER_HOME = 'D:\\javasoftware\\ChromeDriver\\apache-jmeter-5.6.3'
REPORT_DIR = 'report'
SPRINGBOOT_JAR = 'target\\performance-test-server.jar'
}
stages {
stage('拉取代码') {
steps {
git 'https://gitee.com/huhu520/dev-ops-case-study.git'
}
}
stage('构建项目') {
steps {
bat 'mvn clean package'
}
}
stage('启动 SpringBoot 项目') {
steps {
echo "启动 ${env.SPRINGBOOT_JAR}"
bat "start /B java -jar ${env.SPRINGBOOT_JAR}"
sleep 10 // 等待项目启动
}
}
stage('执行 JMeter 压力测试') {
steps {
echo "开始执行 JMeter 测试"
bat "\"%JMETER_HOME%\\bin\\jmeter.bat\" -n -t \"%JMETER_HOME%\\bin\\jmeter_test.jmx\" -l jmeter_results.jtl"
}
}
stage('生成 HTML 报告') {
steps {
echo "生成 JMeter HTML 报告"
bat 'rmdir /s /q %REPORT_DIR%'
bat "\"%JMETER_HOME%\\bin\\jmeter.bat\" -g jmeter_results.jtl -o %REPORT_DIR%"
}
}
stage('发布 HTML 报告到 Jenkins') {
steps {
publishHTML(target: [
allowMissing: false,
alwaysLinkToLastBuild: true,
keepAll: true,
reportDir: REPORT_DIR,
reportFiles: 'index.html',
reportName: 'JMeter 压力测试报告'
])
}
}
stage('停止 SpringBoot Jar') {
steps {
echo "停止 ${env.SPRINGBOOT_JAR} 对应进程"
bat """
REM 查找 PID 并杀掉
for /f "tokens=1,2" %%i in ('jps -l ^| find "${env.SPRINGBOOT_JAR}"') do (
echo 正在杀掉进程 %%i
taskkill /PID %%i /F
)
"""
}
}
}
}- 点击 Save → Build Now 测试流水线是否成功

Jenkins 会依次:
- 拉取 Git 代码
- Maven 构建
- 启动 SpringBoot
- 执行 JMeter 压力测试
- 生成 HTML 报告
- 输出结果 → 并停止 SpringBoot

JMeter 压力测试报告:

2.7 定时构建
前言
1️⃣ 配置定时触发
- 打开你的 Jenkins Job → Configure → Build Triggers
- 勾选 Build periodically
- 填写 Cron 表达式,例如:
| 目标 | Cron 表达式 |
|---|---|
| 每天午夜 12 点执行 | 0 0 * * * |
| 每天晚上 12 点半 | 30 0 * * * |
| 每周一凌晨 1 点 | 0 1 * * 1 |
Jenkins 的 Cron 表达式格式:
MIN HOUR DOM MON DOW
- MIN = 分钟(0-59)
- HOUR = 小时(0-23)
- DOM = 日(1-31)
- MON = 月(1-12)
- DOW = 星期(0-7,0和7都代表周日)




