零基础掌握Jenkins CI/CD:Java项目自动构建与部署全流程指南

零基础掌握Jenkins CI/CD:Java项目自动构建与部署全流程指南

系统:Debian GNU/Linux 12 (bookworm)

最低硬件要求:

  • 256 MB 内存
  • 1 GB 硬盘空间(虽然运行时建议至少 10 GB Jenkins 作为 Docker 容器)

官方安装部署指南:https://www.jenkins.io/doc/book/installing/

一、安装Java

bash 复制代码
sudo apt install -y openjdk-17-jre-headless

java --version
openjdk 17.0.17 2025-10-21
OpenJDK Runtime Environment (build 17.0.17+10-Debian-1deb12u1)
OpenJDK 64-Bit Server VM (build 17.0.17+10-Debian-1deb12u1, mixed mode, sharing)

二、安装jenkins

bash 复制代码
sudo wget -O /etc/apt/keyrings/jenkins-keyring.asc \
  https://pkg.jenkins.io/debian-stable/jenkins.io-2026.key
echo "deb [signed-by=/etc/apt/keyrings/jenkins-keyring.asc]" \
  https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
  /etc/apt/sources.list.d/jenkins.list > /dev/null
sudo apt update
sudo apt install jenkins
  • 软件包安装将执行以下操作

  • 将 Jenkins 设置为开机自启的守护进程。运行 systemctl cat jenkins 可查看详细配置。

  • 创建用于运行该服务的"jenkins"用户。

  • 将控制台日志输出重定向至 systemd-journald 。若需排查 Jenkins 问题,请运行 journalctl -u jenkins.service

  • /lib/systemd/system/jenkins.service 中填充启动配置参数(例如 JENKINS_HOME)。

  • 设置 Jenkins 监听 8080 端口。可通过浏览器访问此端口以开始配置。

  • 若8080端口已被占用,可通过systemctl edit jenkins修改运行端口

yaml 复制代码
[Service]
Environment="JENKINS_PORT=8081"

验证安装

bash 复制代码
root@hyz-test:/data/maven-project# ps -ef |grep jenkins
jenkins  2027294       1  0 11:34 ?        00:01:46 /usr/bin/java -Djava.awt.headless=true -jar /usr/share/java/jenkins.war --webroot=/var/cache/jenkins/war --httpPort=8080
root     2169914 1986014  0 14:40 pts/0    00:00:00 grep jenkins

三、jenkins配置

在浏览器中输入 IP:8080 打开jenkins web页面,根据提示获取管理员密码

powershell 复制代码
cat /var/lib/jenkins/secrets/initialAdminPassword

52b00f23c4e24f24a83307645d967bd1
①安装插件

安装插件步骤可能会出现jenkins离线

解决办法

1.修改 /var/lib/jenkins/updates/default.json

jenkins 在下载插件之前会先检查网络连接,其会读取这个文件中的网址。默认是访问谷歌,肯定监测失败,所以将图下的 www.google.com 改为 www.baidu.com 即可,更改完重启服务

2.修改/var/lib/jenkins/hudson.model.UpdateCenter.xml

该文件为jenkins下载插件的源地址,默认为:https://updates.jenkins.io/update-center.json 我们改成其他国内备用地址https://mirrors.huaweicloud.com/jenkins/updates/update-center.json 此为华为插件镜像

xml 复制代码
<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>https://mirrors.huaweicloud.com/jenkins/updates/update-center.json</url>
  </site>

在修复完之后,我们发现离线问题已经解决,插件可以顺利安装

②创建第一个管理员用户
③url配置

新版本新增安装选项,默认即可

④安装完成

四、安装maven

①下载

访问Maven官方下载页面,选择需要的版本,复制下载链接。使用wget命令下载Maven

例如下载Maven 3.9.12版本

bash 复制代码
wget https://dlcdn.apache.org/maven/maven-3/3.9.12/binaries/apache-maven-3.9.12-bin.tar.gz
②解压文件

将下载的文件解压到你想要安装的位置,例如/opt目录:

bash 复制代码
sudo tar -zxvf apache-maven-3.9.12-bin.tar.gz -C /opt
③配置环境变量
bash 复制代码
sudo vi /etc/profile

#在文件末尾添加以下内容
export M2_HOME=/opt/apache-maven-3.9.12
export PATH=$M2_HOME/bin:$PATH

#保存退出后使环境变量生效
source /etc/profile

#验证安装
mvn -version
Apache Maven 3.9.12 (848fbb4bf2d427b72bdb2471c22fced7ebd9a7a1)
Maven home: /opt/apache-maven-3.9.12
Java version: 17.0.17, vendor: Debian, runtime: /usr/lib/jvm/java-17-openjdk-amd64
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "6.1.0-42-amd64", arch: "amd64", family: "unix"

五、安装jenkins插件

在Jenkins启动成功后,安装以下三个插件能够增强其功能,满足特定的项目需求:

  1. Gitee插件:让Jenkins与Gitee仓库集成,支持自动拉取代码和通过Webhook触发构建。
  2. Maven Integration插件:使Jenkins能调用Maven进行Java项目的构建、测试和打包。
  3. Publish Over SSH插件:允许Jenkins通过SSH安全传输构建产物到远程服务器。

通过安装这些插件,Jenkins能够更好地支持项目构建、打包、部署和代码管理,大大提高自动化部署的效率和灵活性

安装步骤:

系统管理-插件管理-availabe plugins,搜索插件名称进行安装

全部插件安装完成之后,最好登录服务器,重启Jenkins容器以更新插件!具体命令如下

bash 复制代码
docker restart jenkins

六、jenkins全局工具配置

在使用Jenkins进行自动化部署之前,进行一些全局工具的配置是必要的,这样可以确保Jenkins能够正确调用这些工具来完成构建、测试和部署任务。

以下是Jenkins通常需要配置的全局工具:

①JDK

在Jenkins的系统管理 -> "全局工具配置 "中,找到JDK配置部分,点击"添加JDK",指定JDK的安装路径,或者选择自动安装

②maven

在"全局工具配置 "中找到Maven配置 部分,点击"添加Maven ",指定Maven的安装路径,或者选择自动安装

③Git

在"全局工具配置"中找到Git配置部分,添加Git安装路径,或者选择自动安装。确保Jenkins可以访问正确版本的Git

④Gradle(可选)

在"全局工具配置 "中,找到Gradle配置部分,点击"添加Gradle",指定Gradle的安装路径或选择自动安装。

七、jenkins系统配置

在Jenkins中进行系统配置时,Publish Over SSHGitee 的配置是实现代码部署和与代码仓库集成的关键步骤。以下是详细的配置步骤介绍

1.Publish Over SSH 配置

Publish Over SSH 插件允许Jenkins通过SSH将构建生成的文件(如JAR、WAR包)安全地传输到远程服务器上。

①配置SSH服务器

在"系统管理 "页面,选择"系统配置 ",找到SSH Servers部分,添加一个新的SSH服务器

Name : 为服务器配置一个易记的名称。
Hostname : 输入目标服务器的IP地址或主机名。
Username : 输入用于登录到目标服务器的用户名。
Remote Directory : 指定在远程服务器上的默认目录,Jenkins将把构建产物传输到此目录。
Use password authentication, or use a different key : 选择是使用密码认证,还是提供私钥文件进行认证。

如果使用密钥认证,配置私钥文件路径或直接粘贴私钥内容。

点击"测试配置 "或"Test Configuration"按钮,验证Jenkins是否能够成功连接到目标服务器

2.Gitee配置

通过配置Gitee,Jenkins能够与Gitee代码仓库集成,实现代码的自动拉取和构建。以下是配置步骤:

①获取Gitee API token

登录到gitee账户https://gitee.com/profile/personal_access_tokens/ ,在设置 ------私人令牌 ------生成新令牌

根据需要选择令牌的权限,生成令牌后,复制令牌ID并保存

②添加Gitee配置

在"系统配置 "页面,找到Gitee 配置,配置Gitee仓库信息

  • 链接名: 输入你的Gitee仓库的URL(HTTPS)。
  • Gitee域名URL: 输入Gitee域名完整URL地址。
  • 证书令牌: 选择Gitee API令牌。
③添加凭据
  • 在Gitee配置页面 -> 点击添加Jenkins。
  • 在弹出的对话框中选择"Gitee API令牌 ",在"Gitee APIV5私人令牌"字段中粘贴你刚刚生成的Gitee API Token。
  • 为该凭据提供一个名称,并点击"添加"保存

通过上述步骤,就已经在Jenkins中完成了 Publish Over SSHGitee 的配置。这些配置使得Jenkins能够安全地将构建产物部署到远程服务器,同时自动拉取和构建Gitee上的代码,为CI/CD流程提供了基础支持

八、构建项目

在Jenkins中新建一个Maven项目的步骤如下:

1.新建任务
  • 在Jenkins首页,点击左侧菜单中的"新建任务 "或"New Item"。
  • 在弹出的窗口中,为项目输入一个名称,然后选择"构建一个Maven项目 "或"Maven Project"。
  • 点击"确定"进入项目配置页面。
2.配置源码管理
  • Repository URL:填写gitee代码仓库https地址
  • Credentials:选择gitee凭据
  • 指定分支master :*/master表示分支有代码提交则自动触发构建
3.构建触发器

配置构建触发器,这可以是轮询SCM(Poll SCM)、Webhook触发、定时构建等

这里配置Webhook触发构建流程,也就是向gitee上提交代码之后,gitee会自动向jenkins发送一个请求,jenkins收到请求之后,会自动开始构建工作。

4.Gitee中配置webhook

前往gitee仓库管理页面------webhooks------添加webhook

①URL :填写jenkins中生成的webhook地址

②webhook 密码:由jenkins------gitee webhook密码中生成

具体配置如下:

5.构建设置
  • 在"构建 "部分,你需要输入Maven构建的根POM文件的路径,通常是pom.xml
  • 在"Goals and options "中,输入你希望执行的Maven命令,如clean install,根据项目需求选择合适的构建目标。
6.构建后操作
  • 你可以在"构建后操作"部分添加一些后续步骤,如"发送邮件通知"或"部署到服务器"。

  • 如果你使用Publish Over SSH插件,可以配置将构建产物上传到远程服务器的步骤。

  • Source files(源文件) :要传输的本地文件路径(Jenkins 工作空间中的文件)

  • Remove prefix(移除前缀) :传输时,从 Source files 路径中移除指定的路径前缀(避免远程目录自动创建层级),传输时去掉 target/ 这层目录。比如原本路径是 target/jenkins-demo-0.0.1.jar,去掉 target/ 前缀后,文件会直接以 jenkins-demo-0.0.1.jar 的文件名 放到远程目录,而非在远程目录再生成 target/ 子目录。

  • Remote directory(远程服务器目录) :文件要传输到远程主机上的目标目录 ,上图配置说明文件最终会落在远程主机的**/data/jenkins-build/test下 ,此处的test为系统配置**中SSH的相对路径

  • Exec command(部署到远程服务器后运行的脚本):构建好的jar包部署到远程服务器后,执行/data/jenkins-build/testingstart.sh脚本

这里编写一个简单脚本testingstart.sh进行新jar包部署

bash 复制代码
#!/bin/bash
#停止所有旧进程的JAR部署脚本

JAR_DIR="/data/jenkins-build/test"
JAR_NAME="jenkins-testing-1.0-SNAPSHOT.jar"
LOG_FILE="/data/jenkins-build/test/testingstart.log"

# 1. 进入目录
cd "$JAR_DIR"

# 2. 停止所有旧进程
echo "停止所有旧进程..."

OLD_PIDS=$(ps aux | grep java | grep -v grep | grep "$JAR_NAME" | awk '{print $2}')

if [ -n "$OLD_PIDS" ]; then
    echo "找到以下需要停止的进程: $OLD_PIDS"
    for PID in $OLD_PIDS; do
        echo "停止进程 $PID..."
        kill $PID 2>/dev/null
    done
    # 等待所有进程停止
    sleep 3
    echo "✅ 所有旧进程已停止"
else
    echo "✅ 没有正在运行的旧进程"
fi

# 3. 启动新进程
echo "启动新应用..."
nohup java -jar "$JAR_NAME" > "$LOG_FILE" 2>&1 &
NEW_PID=$!
sleep 2

# 4. 验证
if ps -p $NEW_PID > /dev/null; then
    echo "✅ 部署完成!PID: $NEW_PID"
    echo "日志: tail -f $LOG_FILE"

    # 显示当前所有相关进程
    echo "当前所有 $JAR_NAME 进程:"
    ps aux | grep java | grep -v grep | grep "$JAR_NAME"
else
    echo "❌ 启动失败,查看日志:"
    tail -10 "$LOG_FILE"
    exit 1
fi
7.保存配置并构建

构建成功后会显示绿色√,并可以在控制台输出查看构建日志

8.测试Git代码更新------触发jenkins自动构建------部署服务器并上线全自动过程
①对代码进行修改
markdown 复制代码
vim README.md

# My Maven Project
# This is a test project
# This is a test project
# This is a test project
# 这是一个测试文档
# 测试
②推送代码到gitee
shell 复制代码
git add .  #添加所有更改到暂存区
git commit -m "test"   # 提交更改信息
git push origin master  #推送到origin master分支
③推送后验证

刷新Gitee仓库页面,查到代码已经正常更新

查看jenkins任务,已经触发开始自动构建

查看jar包运行时间,已运行最新的jar包

九、Pipeline方式构建(进阶)

1.创建Jenkinsfile
①创建Jenkinsfile并编辑
makefile 复制代码
pipeline {
    agent any

    tools {
        maven 'maven'  // ⚠️ 必须与Jenkins全局工具配置中的名称完全一致!
        jdk 'jdk'
    }

    environment {
        // 安全提示:敏感信息用 credentials 绑定(知识库[6])
        REMOTE_USER = 'deploy_user'
        REMOTE_PATH = '/opt/app'
    }

    stages {
        stage('拉取代码') {
            steps {
                echo "🔍 从 Git 拉取代码..."
                // ⚠️ 替换为你的实际仓库地址和凭证ID
                git(
                    url: 'https://gitee.com/xxxxxx/jenkins-testing.git',
                    branch: 'master',
                    credentialsId: 'xxxxxx'  // 你的Git凭证ID
                )
                echo "✅ 代码拉取成功 | 当前目录: ${env.WORKSPACE}"
            }
        }

        stage('编译构建') {
            steps {
                echo "🔨 执行 Maven 构建..."
                // 跳过测试加速构建(生产环境建议保留测试)
                sh 'mvn clean package -Dmaven.test.skip=true'
                // 验证产物是否存在
                sh 'ls -lh target/*.jar'
                echo "✅ 构建完成 | 产物路径: target/"
            }
        }

        stage('部署到远程服务器') {
            steps {
                echo "🚀 传输 JAR 包到远程服务器..."
                sshPublisher(
                    publishers: [
                        sshPublisherDesc(
                            configName: "测试",  // 必须与Jenkins系统配置中SSH服务器名称一致!
                            transfers: [
                                sshTransfer(
                                    sourceFiles: "target/*.jar",
                                    remoteDirectory: "${REMOTE_PATH}",
                                    cleanRemote: false,
                                    execCommand: "bash /data/jenkins-build/testingstart.sh" // 可选:部署后执行命令
                                )
                            ]
                        )
                    ]
                )
               
                echo "✅ 部署指令已发送"
            }
        }
    }

    post {
        success {
            echo "🎉 Pipeline 执行成功!应用已部署至远程服务器"

        }
        failure {
            echo "❌ Pipeline 执行失败!请检查控制台日志"
        }
    }
}
②提交Jenkinsfile到仓库代码
bash 复制代码
# 在 Maven 项目根目录执行
git add Jenkinsfile
git commit -m "feat: add Jenkins Pipeline configuration"
git push origin master
2.jenkins创建pipeline任务

1.新建任务 → 自定义用户名称 → 选择 流水线(Pipeline) → 确定

2.选择Pipeline script from SCM ,填写git仓库地址+凭证,填写脚本路径默认Jenkinsfile

3.构建测试

在jenkins中执行构建,成功构建最新jar包

相关推荐
AC赳赳老秦2 小时前
DBA 专属方案:用 OpenClaw 实现 SQL 语句优化、慢查询分析、数据库备份巡检全自动化
服务器·前端·数据库·ffmpeg·自动化·deepseek·openclaw
菜萝卜子3 小时前
【Git】GitLab 18.9 全局服务器钩子(Server Hooks)官方规范与落地实践
服务器·git·gitlab
用户11481867894844 小时前
Git Stash 丢失后的完整找回指南
前端·git
Ting.~4 小时前
GIT详解
java·笔记·git
生物信息与育种4 小时前
JIPB | 一个表观多组学整合分析与可视化工具OmicsCanvas
运维·人工智能·算法·自动化·transformer
赛博云推-Twitter热门霸屏工具4 小时前
从0到1搭建 Twitter 自动化营销体系:效率与增长的平衡实践
自动化·twitter·dreamweaver
Cho1yon4 小时前
【AI Agent 第十期:基于 scrcpy + PyTorch 的车载系统多屏自动化测试工具开发】
人工智能·pytorch·ui·车载系统·自动化
克拉拉KLARA4 小时前
vscode禁用在git提交中插入ai coauthor copilot
git·vscode·copilot
一晌小贪欢4 小时前
《Python办公Excel处理》第二节:精通openpyxl,让Excel排版与读写自动化
python·自动化·excel