Jenkins + Docker 打造自动化持续部署流水线

🚀 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:谁才是更好的持续集成方案?》🔥

相关推荐
时鲟、时倾3 小时前
docker部署kafka
docker·容器·kafka
byte轻骑兵3 小时前
WSL+openEuler云原生实践:Docker全流程部署与多容器编排深度评测
docker·云原生·容器·openeuler
2501_915918414 小时前
Flutter 加固方案对比与实战,多工具组合的跨平台安全体系(Flutter App 加固/IPA 成品混淆/Ipa Guard CLI/自动化安全流程)
安全·flutter·ios·小程序·uni-app·自动化·iphone
007tg4 小时前
Telegram SCRM 系统构建指南:自动化营销与客户管理实战
大数据·运维·自动化
虾米Life4 小时前
基于微服务脚手架的视频点播系统 (仿B站) [客户端] -1
c++·qt·微服务·架构
King's King4 小时前
自动化化WMS和WCS投标模板
运维·自动化
悠闲蜗牛�4 小时前
智能时代技术融合之道:大模型、微服务与数据安全的系统化实践
微服务·云原生·架构
火龙谷6 小时前
dy自动化遇到的滑动问题
运维·自动化
Knight_AL6 小时前
Docker 加载镜像时报 no space left on device 的彻底解决方案
docker·容器·eureka