好的阿杰 👍
我来给你写一个详细的 Jenkins 自动化部署入门教程,从零开始带你理解 Jenkins 的作用、安装配置、到最终实现自动化部署(以常见的 Java/SpringBoot 项目为例)。


🛠 Jenkins 自动化部署入门教程

一、Jenkins 是什么?

Jenkins 是一个开源的 持续集成(CI)和持续交付(CD)工具。它能帮助我们:

  • 自动化构建代码(Java、Python、Node.js、Go 等)。
  • 自动化测试(单元测试、接口测试等)。
  • 自动化部署(发布到测试环境/生产环境)。
  • 支持插件扩展(几乎任何 CI/CD 需求都有现成插件)。

一句话总结:代码一提交 → Jenkins 自动构建、测试、部署 → 节省人工运维


二、Jenkins 安装与环境准备

1. 系统要求

  • 操作系统:Linux(推荐 Ubuntu / CentOS),也支持 Windows、Mac。
  • Java 环境:JDK 8/11(Jenkins 运行依赖 Java)。
# 查看是否安装 Java
java -version

若没有,安装 OpenJDK:

# Ubuntu
sudo apt update
sudo apt install openjdk-11-jdk -y

# CentOS
sudo yum install java-11-openjdk -y

2. 安装 Jenkins

Ubuntu / Debian

wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > \
    /etc/apt/sources.list.d/jenkins.list'
sudo apt update
sudo apt install jenkins -y

CentOS / RedHat

wget -O /etc/yum.repos.d/jenkins.repo \
    https://pkg.jenkins.io/redhat-stable/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum install jenkins -y

启动 Jenkins:

systemctl start jenkins
systemctl enable jenkins

3. Web 界面初始化

浏览器访问:

http://你的服务器IP:8080

第一次登录需要输入管理员密码:

cat /var/lib/jenkins/secrets/initialAdminPassword

然后选择:

  • 安装推荐插件
  • 创建第一个管理员账号。

三、Jenkins 基本概念

  • Job(任务/项目):Jenkins 中的构建单元,比如一个项目的自动化构建配置。
  • Pipeline(流水线):代码化的构建过程定义(推荐用 Jenkinsfile 管理)。
  • 节点(Node)/代理(Agent):执行任务的机器,可以是本机或远程机器。
  • 插件(Plugin):扩展功能,如 Git、Maven、Docker、Kubernetes 等。

四、自动化部署流程(实战)

假设我们有一个 Spring Boot 项目,用 Git 管理。

1. 安装必要插件

在 Jenkins → 系统管理 → 插件管理 中安装:

  • Git Plugin(代码拉取)
  • Pipeline(流水线)
  • Maven Integration plugin(Maven 构建)
  • Publish Over SSH(远程部署)

2. 新建一个 Freestyle Job(简单版)

  1. 新建任务 → 输入名称 → 选择 “自由风格项目”。
  2. 源码管理 → 选择 Git → 填写仓库地址和凭据。
  3. 构建触发器 → 勾选 “Poll SCM” 或 “GitHub hook trigger for GITScm polling”。
    • Poll SCM: 定时检测代码更新。
    • GitHub hook: 代码一提交就触发。
  4. 构建环境 → 设置 JDK、Maven。
  5. 构建 → 添加 Maven 构建步骤:clean package -DskipTests
  6. 构建后操作 → 上传 jar 包到远程服务器(需要配置 SSH)。

3. 使用 Pipeline(推荐,企业常用)

在 Git 项目根目录创建 Jenkinsfile

pipeline {
    agent any

    tools {
        maven 'Maven3'   // 在 Jenkins 中配置的 Maven 名称
        jdk 'JDK11'      // 在 Jenkins 中配置的 JDK 名称
    }

    stages {
        stage('拉取代码') {
            steps {
                git branch: 'main', url: 'git@github.com:your-repo/project.git'
            }
        }

        stage('编译打包') {
            steps {
                sh 'mvn clean package -DskipTests'
            }
        }

        stage('部署到服务器') {
            steps {
                sh '''
                scp target/project-1.0.jar user@remote:/home/project/
                ssh user@remote "pkill -f project-1.0.jar || true"
                ssh user@remote "nohup java -jar /home/project/project-1.0.jar > log.txt 2>&1 &"
                '''
            }
        }
    }
}

这样,当你在 Git 提交代码后,Jenkins 会自动完成:

  • 拉取代码
  • 编译打包
  • 部署到服务器并重启应用

五、进阶玩法

  • 结合 Docker:打包成镜像,推送到 Harbor/DockerHub,远程服务器 docker run 启动。
  • 多环境部署:区分 dev/test/prod 环境,用参数化构建。
  • 自动化测试:在流水线中加入单元测试、接口测试。
  • 前端项目部署:npm build → 上传 dist 到 Nginx。

六、常见问题

  1. 权限不足
    • 使用 SSH 部署时,要配置免密登录(ssh-copy-id)。
  2. 中文乱码
    • 修改 Jenkins 系统环境变量 JAVA_OPTS="-Dfile.encoding=UTF-8".
  3. 构建太慢
    • 使用 Maven 私服(如 Nexus),缓存依赖。

七、学习建议

  • 第一步:先用 Freestyle 项目跑通一个 Spring Boot 项目的自动部署。
  • 第二步:升级为 Pipeline,写 Jenkinsfile 管理流程。
  • 第三步:加入 Docker/K8s,做到自动化 + 容器化。
  • 第四步:集成测试、灰度发布、滚动升级。

好嘞阿杰 👍 那我就给你准备一个 完整可运行的 Jenkins + Spring Boot 自动化部署示例,你可以直接用在自己的项目里。


🚀 Jenkins + Spring Boot 自动化部署完整示例

假设条件:

  • 你的 Spring Boot 项目放在 GitHub/Gitee 上(main 分支)。
  • 目标服务器(部署机器)是 Linux,已安装 JDK。
  • Jenkins 部署在一台服务器上,并且能通过 SSH 登录目标服务器。

一、准备工作

1. 在部署服务器上创建目录

mkdir -p /home/project

2. 配置 Jenkins 与目标服务器 SSH 免密

在 Jenkins 服务器执行:

ssh-copy-id user@remote-server-ip

(这样 Jenkins 在执行 ssh/scp 时就不需要输入密码了)

3. 在 Jenkins 中配置工具

  • 系统管理 → 全局工具配置
    • 配置 JDK(如:JDK11)
    • 配置 Maven(如:Maven3)

二、在 Spring Boot 项目中添加 Jenkinsfile

在项目根目录新建 Jenkinsfile,内容如下 👇

pipeline {
    agent any

    tools {
        maven 'Maven3'   // Jenkins 全局工具配置里 Maven 的名字
        jdk 'JDK11'      // Jenkins 全局工具配置里 JDK 的名字
    }

    environment {
        DEPLOY_SERVER = "user@remote-server-ip"
        DEPLOY_PATH = "/home/project"
        APP_NAME = "springboot-demo"
    }

    stages {
        stage('拉取代码') {
            steps {
                git branch: 'main', url: 'git@github.com:your-repo/springboot-demo.git'
            }
        }

        stage('编译打包') {
            steps {
                sh 'mvn clean package -DskipTests'
            }
        }

        stage('上传到服务器') {
            steps {
                sh '''
                scp target/${APP_NAME}-0.0.1-SNAPSHOT.jar $DEPLOY_SERVER:$DEPLOY_PATH/
                '''
            }
        }

        stage('部署启动') {
            steps {
                sh '''
                ssh $DEPLOY_SERVER "
                    pkill -f ${APP_NAME}-0.0.1-SNAPSHOT.jar || true
                    nohup java -jar $DEPLOY_PATH/${APP_NAME}-0.0.1-SNAPSHOT.jar > $DEPLOY_PATH/app.log 2>&1 &
                "
                '''
            }
        }
    }
}

三、Jenkins 配置 Job(流水线)

  1. 打开 Jenkins → 新建任务
    • 选择 Pipeline(流水线项目)
  2. 配置 流水线定义
    • 选择 Pipeline script from SCM
    • SCM 选择 Git,填入仓库地址和凭据。
    • 脚本路径填 Jenkinsfile
  3. 保存并构建。

四、部署流程演示

  1. 你在本地修改 Spring Boot 项目代码,并 push 到 main 分支。
  2. Jenkins 自动触发流水线(或你点“立即构建”)。
  3. 流水线执行:
    • 拉取代码
    • Maven 编译打包
    • 上传 Jar 包到目标服务器
    • 停止旧进程 & 启动新进程
  4. 访问目标服务器:http://remote-server-ip:8080 你的新版本 Spring Boot 项目就跑起来了 🎉

五、可选增强

  1. 灰度/滚动发布
    可以不直接 pkill,而是用 Nginx 代理多个实例,逐步替换。
  2. Docker 化
    用 Jenkins 打 Docker 镜像,推送到 Harbor/DockerHub,再 docker run 部署。
  3. 参数化构建
    在 Jenkins Job 里加参数(选择部署 dev/test/prod 环境)。