🚀 Jenkins + Docker 打造自动化持续部署流水线
从"代码提交"到"线上运行",一次构建、自动打包、自动部署。
本文将带你一步步搭建一个企业级 CI/CD 流水线,让 Spring Boot 应用实现 一键构建、一键上线 。
🧠 一、背景与痛点
传统部署流程中常见问题:
- 🤦♂️ 每次更新都需要手动打包、上传、重启;
- 🐢 发布慢,人工操作多;
- ⚠️ 人为失误风险大;
- 🧩 无法自动回滚、持续交付。

解决方案:Jenkins + Docker + Git + CI/CD
通过 Jenkins 监听代码变更,自动构建 Docker 镜像,并推送部署,实现"提交即上线"。
⚙️ 二、系统架构概览
开发者提交代码 → Git 仓库触发 Webhook → Jenkins 自动构建 → Docker 打包镜像 → 容器启动应用
🧩 技术栈:
- Jenkins:自动化构建工具
- Docker:容器化运行环境
- Spring Boot:示例项目
- Git:代码版本管理
🧰 三、环境准备
| 组件 | 版本 | 说明 |
|---|---|---|
| Jenkins | 2.426+ | 安装 Docker 插件 |
| Docker | 24+ | 支持 BuildKit |
| JDK | 17 | Spring Boot 运行环境 |
| Git | latest | 源码版本管理 |
安装 Jenkins 插件:
在 Jenkins → "插件管理" → 安装以下:
- Docker Pipeline
- Git Parameter
- Pipeline Utility Steps
- Blue Ocean(可选)
🧱 四、示例项目结构
springboot-docker-demo/
┣━ src/
┃ ┣━ main/java/com/example/demo/
┃ ┗━ resources/
┣━ pom.xml
┣━ Dockerfile
┗━ Jenkinsfile
🧩 五、Dockerfile 构建镜像
dockerfile
# 使用 OpenJDK 镜像
FROM openjdk:17-jdk-slim
WORKDIR /app
COPY target/demo-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
🧱 六、Jenkins Pipeline 流水线脚本(重点章节💥)
Jenkinsfile
groovy
pipeline {
agent any
environment {
IMAGE_NAME = "springboot-demo"
IMAGE_TAG = "v${BUILD_NUMBER}"
DOCKERHUB_USER = "your-dockerhub-username"
}
stages {
stage('📥 拉取代码') {
steps {
git branch: 'main', url: 'https://github.com/yourname/springboot-docker-demo.git'
}
}
stage('🔨 构建项目') {
steps {
sh 'mvn clean package -DskipTests'
}
}
stage('🐳 构建 Docker 镜像') {
steps {
sh 'docker build -t $IMAGE_NAME:$IMAGE_TAG .'
}
}
stage('🚀 推送到 Docker Hub') {
steps {
withCredentials([usernamePassword(credentialsId: 'dockerhub', usernameVariable: 'USER', passwordVariable: 'PASS')]) {
sh '''
echo "$PASS" | docker login -u "$USER" --password-stdin
docker tag $IMAGE_NAME:$IMAGE_TAG $DOCKERHUB_USER/$IMAGE_NAME:$IMAGE_TAG
docker push $DOCKERHUB_USER/$IMAGE_NAME:$IMAGE_TAG
'''
}
}
}
stage('📦 部署到服务器') {
steps {
sh '''
docker stop springboot-demo || true
docker rm springboot-demo || true
docker pull $DOCKERHUB_USER/$IMAGE_NAME:$IMAGE_TAG
docker run -d -p 8080:8080 --name springboot-demo $DOCKERHUB_USER/$IMAGE_NAME:$IMAGE_TAG
'''
}
}
}
post {
success {
echo "✅ 部署成功!访问:http://<server-ip>:8080"
}
failure {
echo "❌ 部署失败,请检查 Jenkins 控制台日志"
}
}
}
🧪 七、实战演示:自动化部署 Spring Boot 应用
🧩 场景说明
我们以一个简单的库存管理系统为例:
- 后端使用 Spring Boot;
- 提交到 GitHub;
- Jenkins 自动拉取、构建、发布;
- Docker 运行应用容器。
🚀 Step 1:配置 Jenkins Job
1️⃣ 选择 "新建任务 → Pipeline"
2️⃣ 代码来源:Git
3️⃣ 指定分支:main
4️⃣ Pipeline 脚本路径:Jenkinsfile
5️⃣ 勾选"触发器":
text
GitHub hook trigger for GITScm polling
🚀 Step 2:推送代码触发自动部署
bash
git add .
git commit -m "更新库存接口"
git push origin main
👉 Jenkins 自动启动流水线,控制台日志中可看到:
📥 拉取代码
🔨 构建项目
🐳 构建 Docker 镜像
🚀 推送到 Docker Hub
📦 部署到服务器
✅ 部署成功!访问:http://server-ip:8080
🧾 Step 3:验证部署结果
访问:
http://your-server-ip:8080/api/stock/list
输出示例:
json
[
{"product":"MacBook Air","stock":12},
{"product":"iPhone 16","stock":7}
]
说明部署成功 🎉。
⚡ 八、流水线优化方向
| 问题 | 优化思路 |
|---|---|
| 多环境部署 | 使用参数化构建 + 环境变量 |
| 镜像版本混乱 | 自动打上 Git Commit Tag |
| 流水线慢 | 启用 Docker BuildKit 并缓存层 |
| 自动回滚 | Jenkinsfile 中加入 rollback 阶段 |
| 部署安全 | Jenkins Agent + 凭证绑定 |
🔧 九、可视化效果(Blue Ocean)
Jenkins Blue Ocean 插件可以让整个流水线图形化展示:
- 每个阶段的执行耗时
- 日志展开查看
- 失败点快速定位
🧠 十、总结
| 模块 | 技术点 |
|---|---|
| 自动化工具 | Jenkins Pipeline |
| 镜像构建 | Dockerfile |
| 自动部署 | 容器化运行 Spring Boot |
| 持续交付 | Git Hook 触发构建 |
| 企业应用 | 自动构建、测试、上线全链路 |
💬 结语
你们团队现在的部署方式是怎样的?
是脚本式、容器化,还是 Jenkins 流水线?
欢迎留言讨论,下一篇我写《GitLab CI vs Jenkins:谁才是更好的持续集成方案?》🔥

