Linux运维:Jenkins部署

Jenkins 完整部署流程

一句话总结:Jenkins 是自动化流水线工具,把"代码提交→编译打包→测试→部署上线"全流程自动化,不用人工一步步操作


一、先搞懂核心逻辑

Jenkins 就像一个自动化机器人,你告诉它"代码提交后要做什么",它就会按顺序自动执行所有步骤,成功就部署上线,失败就发通知告诉你哪里错了。

标准流程闭环

复制代码
开发者提交代码 → Git仓库 → Jenkins自动触发 → 拉取代码 → 编译打包 → 质量检查 → 推送镜像 → 部署到服务器 → 自动化测试 → 通知结果

二、完整部署步骤(以 Spring Boot + Docker + K8s 项目为例)

前置准备(一次性配置)

  1. 搭建 Jenkins 服务器:安装 JDK、Git、Docker、Maven 等工具
  2. 配置凭证:在 Jenkins 中添加 Git 仓库密钥、镜像仓库密码、服务器 SSH 密钥
  3. 配置环境:安装必要插件(Git、Pipeline、Docker、Kubernetes、SonarQube)
  4. 准备目标环境:测试服务器/生产服务器、Docker 镜像仓库、K8s 集群

步骤1:触发构建(3种方式)

  1. 自动触发(最常用):开发者提交代码到 Git 仓库(GitHub/GitLab),Git 通过 Webhook 通知 Jenkins 开始构建
  2. 定时触发:每天凌晨自动构建部署测试环境
  3. 手动触发:在 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 连接到目标服务器,执行以下操作:

  1. 拉取最新镜像
  2. 停止旧容器
  3. 启动新容器
  4. 检查容器是否正常运行
方式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脚本吗?

相关推荐
中微极客2 小时前
2026主流AI Agent框架技术选型与性能对比
运维·网络·人工智能
XMAIPC_Robot2 小时前
软硬协同实时控制|RK3588业务调度+FPGA硬件时序,ethercat实现半导体设备微秒级响应(125us)
linux·arm开发·人工智能·fpga开发
AOwhisky3 小时前
Python 学习笔记(第十五期)——运维自动化(下·后篇):堡垒机实战——paramiko高阶篇
运维·python·学习·云原生·自动化·运维开发
重生的黑客3 小时前
Linux 进程优先级、切换与调度:从孤儿进程到 O(1) 调度模型
linux·运维·服务器·进程优先级·nice
Urbano3 小时前
夹克与商务单西口袋工序自动化技改研究报告
运维·自动化
骑上单车去旅行4 小时前
MD5校验对比脚本
linux·服务器·windows
平生幻4 小时前
Linux 常用命令
linux
期待着20135 小时前
docker 安装 ,在centos7.9
运维·docker·容器
踏月的造梦星球5 小时前
DM8 DSC 单机双实例部署
运维·开发语言·数据库
MXsoft6185 小时前
平台化是智能运维发展的必然趋势吗?
运维