零基础掌握Jenkins CI/CD:Java项目自动构建与部署全流程指南
系统:Debian GNU/Linux 12 (bookworm)
最低硬件要求:
- 256 MB 内存
- 1 GB 硬盘空间(虽然运行时建议至少 10 GB Jenkins 作为 Docker 容器)
一、安装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启动成功后,安装以下三个插件能够增强其功能,满足特定的项目需求:
- Gitee插件:让Jenkins与Gitee仓库集成,支持自动拉取代码和通过Webhook触发构建。
- Maven Integration插件:使Jenkins能调用Maven进行Java项目的构建、测试和打包。
- 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 SSH 和 Gitee 的配置是实现代码部署和与代码仓库集成的关键步骤。以下是详细的配置步骤介绍
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 SSH 和 Gitee 的配置。这些配置使得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包
