Linux运维:Jenkins部署
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 仓库。
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脚本吗?
