Jenkins 完整部署流程
一句话总结:Jenkins 是自动化流水线工具,把"代码提交→编译打包→测试→部署上线"全流程自动化,不用人工一步步操作。
一、先搞懂核心逻辑
Jenkins 就像一个自动化机器人,你告诉它"代码提交后要做什么",它就会按顺序自动执行所有步骤,成功就部署上线,失败就发通知告诉你哪里错了。
标准流程闭环:
开发者提交代码 → Git仓库 → Jenkins自动触发 → 拉取代码 → 编译打包 → 质量检查 → 推送镜像 → 部署到服务器 → 自动化测试 → 通知结果
二、完整部署步骤(以 Spring Boot + Docker + K8s 项目为例)
前置准备(一次性配置)
- 搭建 Jenkins 服务器:安装 JDK、Git、Docker、Maven 等工具
- 配置凭证:在 Jenkins 中添加 Git 仓库密钥、镜像仓库密码、服务器 SSH 密钥
- 配置环境:安装必要插件(Git、Pipeline、Docker、Kubernetes、SonarQube)
- 准备目标环境:测试服务器/生产服务器、Docker 镜像仓库、K8s 集群
步骤1:触发构建(3种方式)
- 自动触发(最常用):开发者提交代码到 Git 仓库(GitHub/GitLab),Git 通过 Webhook 通知 Jenkins 开始构建
- 定时触发:每天凌晨自动构建部署测试环境
- 手动触发:在 Jenkins 界面点击"立即构建"
步骤2:拉取最新代码
Jenkins 从 Git 仓库拉取指定分支(如 dev/master)的最新代码到本地工作目录。
步骤3:编译打包
- Java 项目:执行
mvn clean package -DskipTests,生成.jar包 - Python 项目:执行
pip install -r requirements.txt,打包依赖 - 前端项目:执行
npm install && npm run build,生成dist静态文件
步骤4:代码质量检查(可选但生产必做)
调用 SonarQube 扫描代码,检查代码漏洞、代码异味、测试覆盖率,不达标则直接终止构建。
步骤5:构建 Docker 镜像
用项目根目录的 Dockerfile 构建镜像,打上版本号(如 v1.0.0 或 Git 提交哈希)。
步骤6:推送镜像到仓库
把构建好的镜像推送到私有镜像仓库(如 Harbor、Docker Hub),供部署环境拉取。
步骤7:部署到目标环境
方式1:部署到物理机/虚拟机
通过 SSH 连接到目标服务器,执行以下操作:
- 拉取最新镜像
- 停止旧容器
- 启动新容器
- 检查容器是否正常运行
方式2:部署到 K8s 集群(生产主流)
Jenkins 调用 kubectl apply -f deployment.yaml,更新 K8s 集群中的 Deployment,实现滚动更新。
步骤8:自动化测试(可选)
部署完成后,自动运行接口测试、UI 测试,验证部署是否成功。
步骤9:通知结果
通过邮件、钉钉、企业微信通知团队成员:
- 构建成功:"项目 v1.0.0 已成功部署到测试环境"
- 构建失败:"构建失败,错误原因:编译错误"
三、Jenkins Pipeline 脚本示例(直接能用)
这是生产环境最常用的声明式 Pipeline ,把所有步骤写在一个 Jenkinsfile 里,和代码一起存在 Git 仓库。
groovy
pipeline {
agent any
environment {
// 定义全局变量
IMAGE_NAME = "harbor.example.com/demo/spring-boot-demo"
IMAGE_TAG = "${BUILD_NUMBER}"
K8S_NAMESPACE = "demo"
}
stages {
stage('拉取代码') {
steps {
git url: 'https://git.example.com/demo/spring-boot-demo.git', branch: 'dev', credentialsId: 'git-credential'
}
}
stage('编译打包') {
steps {
sh 'mvn clean package -DskipTests'
}
}
stage('构建镜像') {
steps {
sh "docker build -t ${IMAGE_NAME}:${IMAGE_TAG} ."
}
}
stage('推送镜像') {
steps {
withCredentials([usernamePassword(credentialsId: 'harbor-credential', usernameVariable: 'USER', passwordVariable: 'PASS')]) {
sh "docker login harbor.example.com -u ${USER} -p ${PASS}"
sh "docker push ${IMAGE_NAME}:${IMAGE_TAG}"
}
}
}
stage('部署到K8s') {
steps {
sh "kubectl set image deployment/spring-boot-demo spring-boot-demo=${IMAGE_NAME}:${IMAGE_TAG} -n ${K8S_NAMESPACE}"
sh "kubectl rollout status deployment/spring-boot-demo -n ${K8S_NAMESPACE}"
}
}
}
post {
success {
dingtalk (
robot: 'jenkins-dingtalk',
type: 'MARKDOWN',
title: '构建成功',
text: [
"### 项目部署成功",
"项目名称:spring-boot-demo",
"版本号:${IMAGE_TAG}",
"部署环境:测试环境"
]
)
}
failure {
dingtalk (
robot: 'jenkins-dingtalk',
type: 'MARKDOWN',
title: '构建失败',
text: [
"### 项目部署失败",
"项目名称:spring-boot-demo",
"构建号:${BUILD_NUMBER}",
"请查看Jenkins日志排查问题"
]
)
}
}
}
四、面试标准答案
Jenkins 是一个开源的持续集成和持续部署工具,它的完整部署流程是:
首先,开发者提交代码到 Git 仓库,Git 通过 Webhook 触发 Jenkins 构建。Jenkins 拉取最新代码后,执行编译打包、代码质量检查等步骤,然后构建 Docker 镜像并推送到镜像仓库。最后,Jenkins 通过 SSH 或 kubectl 将应用部署到测试环境或生产环境,部署完成后自动运行测试并通知团队成员结果。
整个过程完全自动化,大大提高了开发效率,减少了人工操作带来的错误。
需要我给你一个纯物理机部署(不用Docker/K8s)的Pipeline脚本吗?