第一章 基础概念——读懂 CI/CD 与 Jenkins
1.1 本章学习目标
-
理解 CI/CD 的核心作用与工作流程
-
明确 Jenkins 在 DevOps 中的定位
-
掌握 Jenkins 核心专业术语
-
区分传统手动部署与自动化部署的差异
1.2 CI/CD 核心概念
1.2.1 什么是 CI(持续集成)
传统开发模式中,开发者本地开发完成后,集中合并代码到主干分支,极易出现代码冲突、依赖缺失、编译报错等问题,且问题集中在迭代后期爆发,修复成本极高。
CI(持续集成)的核心思想:高频、自动合并代码 + 自动编译 + 自动测试。开发者每次提交代码,系统都会自动完成合并与校验,提前发现bug、代码冲突、编译异常,保证主干代码始终处于可编译、可运行的稳定状态。
1.2.2 什么是 CD(持续交付 / 持续部署)
CD 分为持续交付和持续部署,是持续集成的延伸,完整覆盖代码打包到线上部署的全流程。
持续交付:基于持续集成的结果,自动完成打包、制品归档、环境适配,生成可部署的 Jar、War、Docker 镜像等文件。全程自动化构建,最终由人工确认是否部署到测试、预发、生产环境。
持续部署:在持续交付的基础上实现全流程无人值守,代码提交、合并、构建、测试、打包、部署全程自动完成,无需人工干预,是企业自动化交付的最终形态。
1.2.3 CI/CD 核心价值
-
降低迭代风险:小批量高频集成,问题早发现、早修复,避免版本集中爆雷
-
提升交付效率:替代手动编译、打包、部署,大幅缩短迭代周期
-
统一环境标准:所有环境构建流程统一,解决“本地正常、线上报错”的环境差异问题
-
全程可追溯:构建日志、部署记录、测试结果全程留存,方便问题排查与版本回滚
1.3 Jenkins 在 DevOps 中的定位
DevOps 打通开发、测试、运维流程,而 Jenkins 是整个流程的调度中枢。
Git 负责代码版本管理、Maven 负责编译构建、JUnit 负责自动化测试、Tomcat/Docker 负责项目运行,Jenkins 不参与具体业务构建,只负责串联所有工具,实现自动化调度。
简单来说:Jenkins 是 CI/CD 流程的调度核心,是自动化落地的载体。
1.4 Jenkins 核心术语详解
1.4.1 Job(任务/项目)
Jenkins 最小执行单元,一个 Job 对应一套完整的构建、部署流程。常用两种类型:自由风格项目、流水线项目。
1.4.2 Pipeline(流水线)
企业主流构建方式,核心特点是流水线即代码,通过 Jenkinsfile 脚本定义构建流程,支持版本管控、复用、跨环境迁移,分为声明式(零基础友好、企业通用)和脚本式(高度自定义)两种语法。
1.4.3 Node(节点)
执行构建任务的服务器节点,分为 Master 主节点和 Agent 从节点。Master 负责调度和管理,Agent 负责执行具体构建任务,分布式部署可分担服务压力。零基础学习仅需单节点部署即可。
1.4.4 Plugin(插件)
Jenkins 原生功能极简,绝大多数能力依赖插件实现,包括 Git 拉取、Maven 构建、测试报告、部署、凭据管理等,丰富的插件生态是其通用性强的核心原因。
1.4.5 Workspace(工作空间)
节点专属工作目录,存放源码、构建缓存、测试报告、部署包等临时文件,每次构建都会在工作空间中执行。
1.4.6 Build(构建)
单次任务执行过程,每个构建对应唯一编号,可查看日志、运行状态、产物,支持重跑、回滚操作。
1.4.7 Credential(凭据)
加密存储敏感信息,包括 Git 账号密码、服务器密钥、Token、仓库令牌等,杜绝明文泄露,保障自动化流程安全。
1.4.8 Artifact(制品)
构建完成后的可部署文件,如 Jar、War 包,支持归档、下载、版本留存、回滚使用。
1.5 本章总结
CI 解决代码合并与编译自动化,提前规避风险;CD 实现打包部署自动化,提升交付效率;Jenkins 作为调度核心,串联整套 DevOps 流程。Job、Pipeline、插件、工作空间、凭据等核心术语,是后续实操的基础。
第二章 环境搭建——Windows + Linux 双环境部署
2.1 本章学习目标
-
掌握 Jenkins 适配的 JDK 版本,规避启动报错
-
完成 Windows、Linux 双环境安装与初始化配置
-
掌握插件安装、镜像源优化方法
-
解决端口占用、启动失败、插件下载超时等常见问题
2.2 前置环境:JDK 版本要求
新版 Jenkins(2.400+)不再支持 JDK8,仅兼容 JDK11、JDK17。零基础学习统一推荐JDK11 稳定版,兼容性最好、报错最少。部署前需完成 JDK 环境变量配置,确保 java -version 可正常执行。
2.3 Windows 环境安装部署
2.3.1 安装包下载
访问 Jenkins 官网下载地址:https://www\.jenkins\.io/download/,选择 Windows 平台 MSI 安装包。结合Jenkins官方最新版本规范,Jenkins 分为两大发布线路,生产、测试、学习环境严格区分选型,规避版本兼容与安全风险:
1. LTS 长期稳定版(生产/零基础首选):每12周迭代一个基线版本,每4周推送安全补丁、漏洞修复、bug回溯修复,无新功能迭代,兼容性极强、故障率极低。当前官方主推稳定版本为 2.568.1 LTS,是企业线上环境标准选型。
2. Weekly 每周迭代版(仅测试研发使用):每周更新迭代,快速上线新功能、插件适配特性,仅适用于功能测试、技术调研场景。当前最新版本为 2.575,禁止用于生产环境,存在插件兼容、系统稳定性未知风险。
全平台统一适配标准:Windows、Linux、Docker、Kubernetes 所有部署环境,生产环境一律统一使用 LTS 稳定版,杜绝版本混用。
2.3.2 安装流程
-
以管理员身份运行安装包,同意许可协议
-
自定义安装路径,建议不安装在 C 盘,避免权限不足
-
端口默认 8080,若被占用可修改为 8081、9090 等空闲端口
-
自动识别系统 JDK11 路径,识别失败可手动选择 java.exe 路径
-
设置开机自启,等待安装完成
2.3.3 初始化解锁
安装完成后,浏览器访问 http://localhost:8080,需要输入初始管理员密码。
Windows 默认密码路径:C:\Windows\System32\config\systemprofile\AppData\Local\Jenkins\.jenkins\secrets\initialAdminPassword
打开文件复制密码,粘贴解锁即可进入初始化页面。
2.3.4 初始化配置
-
选择「安装推荐的插件」,自动安装基础插件
-
自定义管理员账号、密码、邮箱(务必牢记)
-
默认本机访问地址,后续可修改为公网 IP
-
初始化完成,进入 Jenkins 控制台
2.4 Linux 环境安装部署(CentOS7/8 通用)
2.4.1 前置准备
关闭防火墙和 SELinux,避免端口拦截和权限问题,提前安装并配置 JDK11 环境变量。
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 临时关闭SELinux
setenforce 0
2.4.2 导入官方源与密钥
# 导入Jenkins官方密钥
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
# 添加Jenkins YUM源
sudo curl -o /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
2.4.3 安装 Jenkins
# 清空yum缓存
yum clean all
# 安装稳定版LTS
yum install -y jenkins
2.4.4 启动服务
# 启动服务
systemctl start jenkins
# 开机自启
systemctl enable jenkins
# 查看运行状态
systemctl status jenkins
2.4.5 初始化解锁
浏览器访问 服务器IP:8080,执行以下命令查看初始密码:
cat /var/lib/jenkins/secrets/initialAdminPassword
后续插件安装、账号创建流程与 Windows 环境完全一致。
2.4.6 Docker 一键部署方案(企业极简主流方案)
Docker 部署是目前企业最常用的 Jenkins 部署方式,具备环境隔离、部署极速、无系统环境冲突、一键迁移扩容的优势,适配所有 Linux 服务器,零基础可直接复制命令落地。本次基于官方 LTS 稳定镜像部署,适配生产环境。
前置条件
服务器已安装 Docker 环境,启动 Docker 服务,关闭防火墙与 SELinux。
一键部署完整脚本
# 拉取官方LTS稳定镜像(生产固定版本,不使用latest模糊标签)
docker pull jenkins/jenkins:2.568.1-lts
# 创建持久化挂载目录,防止容器删除数据丢失
mkdir -p /data/jenkins/home
# 启动Jenkins容器,永久运行、端口映射、数据持久化
docker run -d \
-p 8080:8080 \
-p 50000:50000 \
-v /data/jenkins/home:/var/jenkins_home \
--name jenkins-lts \
--restart=always \
jenkins/jenkins:2.568.1-lts
容器部署核心说明
-
端口:8080为网页访问端口,50000为Agent从节点通信端口,对外开放
-
数据持久化:挂载本地目录,容器重建、升级数据不丢失
-
开机自启:restart=always保证服务器重启后自动恢复Jenkins服务
-
环境自带JDK,无需手动配置Java环境,零环境冲突
Docker环境初始密码查看
# 查看初始管理员密码
cat /data/jenkins/home/secrets/initialAdminPassword
2.5 必备插件清单与安装优化
初始化推荐插件仅满足基础访问,自动化构建、部署需要手动安装核心插件。
| 插件名称 | 核心作用 | 安装必要性 |
|---|---|---|
| Git Plugin | Git 代码拉取、分支管理、版本切换 | 必装 |
| Maven Integration | Maven 项目编译、打包、依赖构建 | 必装 |
| JUnit | 解析单元测试报告、统计用例通过率 | 必装 |
| Deploy to container | War 包自动部署至 Tomcat | 必装 |
| Pipeline | 支持流水线项目创建与脚本执行 | 必装 |
| Credentials Binding | 凭据加密存储、绑定使用 | 必装 |
| Parameterized Trigger | 参数化构建、定时构建、任务联动 | 进阶必装 |
| Workspace Cleanup | 构建前清空工作空间,避免缓存污染 | 推荐安装 |
2.5.1 插件安装步骤
系统管理 → 插件管理 → 可用插件,搜索插件名称勾选安装,勾选重启服务生效。
2.5.2 插件下载失败解决
官方插件源在海外,极易超时失败。可替换为清华镜像源:系统管理 → 插件管理 → 高级设置,替换 Update Site 为国内镜像地址,刷新后重新下载。
2.6 环境搭建常见问题排查
-
端口占用:查询占用进程并关闭,或修改 Jenkins 启动端口
-
JDK 版本报错:更换 JDK11,重新配置环境变量
-
插件超时:切换国内镜像源,重启 Jenkins
-
Linux 8080 无法访问:关闭防火墙、放行端口,检查服务运行状态
第三章 项目实战——自由风格 + 流水线双模式落地
3.1 本章学习目标
-
熟练掌握 Freestyle 自由风格项目完整构建流程
-
掌握声明式 Pipeline 流水线脚本编写与落地
-
实现代码拉取、构建、测试、归档、部署全自动化
-
掌握两种构建模式的适用场景与排错方法
3.2 实战前置准备
-
准备可正常编译的 Maven 测试项目,上传至 Gitee/GitHub 仓库
-
服务器安装并配置 Maven 环境,Jenkins 关联本地 Maven
-
部署 Tomcat8/9,开启远程部署权限
-
安装完成第二章所有核心插件
3.3 实战一:Freestyle 自由风格项目部署
3.3.1 新建项目
新建任务,输入项目名称,选择自由风格项目。开启「丢弃旧的构建」,设置最大保留 10 条构建记录,节省磁盘空间。
3.3.2 源码管理(Git 拉取代码)
勾选 Git,填写仓库地址,添加仓库账号密码凭据,选择对应分支,完成代码拉取配置。
3.3.3 构建环境配置
-
勾选「构建前清空工作空间」,避免缓存污染
-
开启构建超时终止,设置 15 分钟超时,防止任务卡死
3.3.4 构建步骤(Maven 编译打包)
选择「调用顶层 Maven 目标」,选择已配置的 Maven 版本,输入构建命令:
clean package -Dmaven.test.skip=false
3.3.5 后置处理配置
-
测试报告:发布 JUnit 报告,路径
**/target/surefire-reports/*.xml -
制品归档:归档
target/*.war,留存部署包 -
Tomcat 部署:配置 Tomcat 地址与管理员凭据,自动部署 War 包
3.3.6 构建验证
保存配置,点击立即构建,查看控制台日志跟踪流程,构建成功后验证测试报告、制品文件、项目访问地址。
3.4 实战二:声明式 Pipeline 流水线部署
流水线是企业生产主流方案,通过 Jenkinsfile 脚本定义流程,支持版本管控、复用、迭代维护,稳定性远高于自由风格。
3.4.1 新建流水线项目
新建任务,选择流水线项目,进入配置页面。
3.4.2 流水线核心配置
流水线定义选择「Pipeline script from SCM」,选择 Git,配置仓库地址、凭据、分支,脚本路径填写 Jenkinsfile(项目根目录)。
3.4.3 完整可复用 Jenkinsfile
pipeline {
agent any
environment {
TOMCAT_URL = 'http://127.0.0.1:8080/manager/text'
GIT_CRED = 'git-cred-id'
}
stages {
stage('代码拉取') {
steps {
echo "开始拉取最新代码"
cleanWs()
git url: 'https://gitee.com/xxx/xxx-maven-demo.git',
credentialsId: "${GIT_CRED}",
branch: 'main'
}
}
stage('Maven编译构建') {
steps {
echo "开始项目构建"
sh 'mvn clean package -Dmaven.test.skip=false'
}
}
stage('自动化单元测试') {
steps {
echo "执行单元测试"
}
post {
always {
junit '**/target/surefire-reports/*.xml'
}
}
}
stage('制品归档') {
steps {
echo "归档部署制品"
}
post {
always {
archiveArtifacts artifacts: 'target/*.war', fingerprint: true
}
}
}
stage('Tomcat自动化部署') {
steps {
echo "部署至Tomcat服务器"
deploy war: 'target/*.war',
contextPath: '',
tomcatUrl: "${TOMCAT_URL}",
credentialsId: 'tomcat-cred-id'
}
}
}
post {
success {
echo "CI/CD全流程执行成功!"
}
failure {
echo "构建部署失败,请查看日志排查问题!"
}
}
}
3.4.4 脚本说明
-
agent any:任意可用节点执行任务
-
environment:统一管理全局变量,便于维护
-
cleanWs():清空工作空间缓存,避免污染构建
-
post:构建完成后固定执行报告生成、制品归档等操作
3.4.5 流水线验证
保存配置后立即构建,可视化查看各阶段执行状态、耗时,构建完成后验证部署结果,支持单阶段重试、失败重跑。
3.5 两种构建模式对比
| 对比维度 | Freestyle 自由风格 | Pipeline 流水线 |
|---|---|---|
| 操作方式 | 页面点击配置,无需编码 | 脚本定义流程,代码化管理 |
| 可复用性 | 差,项目独立配置 | 强,脚本可全局复用 |
| 版本可控 | 无,配置存在本地 | 有,脚本纳入 Git 版本管理 |
| 复杂度 | 低,零基础快速上手 | 中等,需掌握基础脚本语法 |
| 适用场景 | 测试项目、临时任务、新手练习 | 企业生产、正式项目、复杂自动化流程 |
3.6 实战常见问题排查
-
Maven 依赖下载失败/超时缓慢:默认官方源下载速度极慢,需配置阿里云全局镜像彻底解决,检查网络连通性
-
Tomcat 403 权限拒绝:修改 tomcat-users.xml,配置管理员远程部署权限
-
无测试报告:项目编写有效单元测试,不跳过测试执行
-
流水线脚本报错:使用 Jenkins 内置语法校验工具,核对凭据、路径、变量配置
3.7 补充:Maven 全局阿里云镜像配置(根治依赖超时)
Jenkins构建Maven项目超时、依赖拉取失败、下载缓慢,核心原因是默认海外源网络不稳定。企业通用解决方案为配置全局阿里云镜像,一次配置永久生效,所有项目自动适配。
完整settings.xml配置(直接覆盖使用)
找到服务器Maven全局配置文件(默认路径:/usr/local/maven/conf/settings.xml),替换全部内容:
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>/data/maven/repository</localRepository>
<mirrors>
<!-- 阿里云全局镜像,覆盖所有依赖下载 -->
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central,jcenter,daragon,third-party</mirrorOf>
<name>阿里云公共Maven镜像</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>ali-jdk-11</id>
<activation>
<jdk>11</jdk>
</activation>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
</properties>
</profile>
</profiles>
<activeProfiles>
<activeProfile>ali-jdk-11</activeProfile>
</activeProfiles>
</settings.xml>
配置生效校验
配置完成后,在服务器执行 mvn clean test,观察依赖均从阿里云地址拉取,无超时、卡顿即为生效,彻底解决Jenkins构建依赖问题。
第四章 进阶技巧——高阶功能与生产安全实践
4.1 本章学习目标
-
掌握参数化构建、定时构建核心用法
-
熟练使用凭据管理、环境变量配置
-
掌握日志排查、故障定位技巧
-
实现 WebHook 代码提交自动构建,落地全自动 CI
-
掌握企业 CI/CD 安全规范
4.2 参数化构建
参数化构建可实现一个项目适配多分支、多环境、多场景构建,无需反复修改配置,是生产通用高阶能力。
4.2.1 布尔参数
用于流程开关控制,例如是否执行测试、是否清空缓存、是否开启部署。可在流水线脚本中通过变量判断控制流程执行。
4.2.2 下拉选择参数
多用于多环境、多分支切换,提前配置测试、预发、生产环境选项,构建时一键选择,自动适配对应部署配置。
4.3 凭据管理(生产安全核心)
所有敏感信息禁止明文配置,统一通过凭据加密存储,支持三种常用类型:
-
用户名密码:适配 Git、Tomcat、服务器登录
-
字符串凭据:适配 Token、密钥、令牌
-
SSH 密钥:适配 Linux 免密登录、私有仓库拉取
生产规范:凭据配置固定 ID、权限分级、定期轮换密钥,杜绝明文泄露。
4.4 环境变量使用
-
全局环境变量:系统级通用配置,如 JDK、Maven 路径、公共服务器地址
-
项目局部变量:单项目专属配置,适配个性化场景
-
流水线动态变量:脚本内自定义,灵活性最高,生产首选
4.5 定时构建(Cron 语法)
Jenkins 定时任务基于标准 Linux Cron 语法,格式:分 时 日 月 周
4.5.1 常用定时示例
-
每日凌晨2点构建:
0 2 * * * -
每小时整点构建:
0 * * * * -
每隔30分钟构建:
*/30 * * * * -
每周日凌晨3点构建:
0 3 * * 0
4.6 日志分析与排错技巧
-
控制台日志:实时查看构建流程,定位即时报错
-
历史构建日志:留存所有构建记录,用于问题回溯
-
系统日志:排查服务启动、插件加载异常
排错核心:检索 Error、Exception、Failed 等关键字,快速定位异常步骤。
4.7 生产 CI/CD 安全规范
-
账号权限分级,禁止日常使用超级管理员账号
-
所有敏感信息加密存储,定期轮换凭据
-
仅安装官方认证插件,定期更新修复漏洞
-
多环境任务隔离,避免配置串扰
-
开启日志审计,全程记录操作行为
-
禁止流水线配置高危系统命令,保障服务器安全
4.8 WebHook 自动构建(全自动 CI 落地)
WebHook 可实现 代码提交即自动构建部署,摆脱手动触发,是持续集成的最终落地形态。
4.8.1 核心原理
代码推送、分支合并后,Git 仓库主动回调 Jenkins 接口,Jenkins 接收请求并自动触发构建任务,实现无人值守自动化流程。
4.8.2 必备插件
-
Gitee Plugin(国内码云首选)
-
GitHub Integration Plugin
-
GitLab Plugin
-
Generic Webhook Trigger(通用过滤)
4.8.3 Jenkins 端触发器配置
项目配置 → 构建触发器,根据仓库类型勾选对应触发规则,开启旧构建自动清理。
4.8.4 Gitee 仓库 WebHook 配置
-
仓库管理 → WebHook 管理 → 添加 WebHook
-
回调地址:
http://JenkinsIP:8080/gitee-webhook-trigger/invoke(末尾必须带 /) -
请求方式 POST,数据格式 application/json
-
仅勾选代码推送事件,关闭无用触发事件
-
可选配置安全密钥,拦截恶意请求
4.8.5 内网环境解决方案
本地内网 Jenkins 无法被外网仓库回调,可使用 FRP、Ngrok 内网穿透工具,将本地 8080 端口映射为公网地址,即可正常触发 WebHook。
4.8.6 分支过滤(生产必备)
默认所有分支提交都会触发构建,生产需精准过滤,仅主干分支触发,通过通用触发器配置正则过滤规则:
-
仅 main 分支:
^main$ -
仅 master 分支:
^master$
4.8.7 高频报错排查
| 报错现象 | 原因 | 解决方案 |
|---|---|---|
| WebHook 404 | 地址错误、缺失末尾斜杠、插件未生效 | 核对规范地址,重启 Jenkins 重载插件 |
| 请求超时 | 内网无公网访问、防火墙拦截 | 使用内网穿透,放行端口、关闭防火墙 |
| 200成功但不构建 | 触发器未勾选、分支过滤拦截 | 核对项目配置,调整过滤规则 |
| 重复构建 | 高频推送事件堆积 | 开启去重过滤,设置构建冷却时间 |
第五章 全文总结与进阶学习路线
5.1 全文总结
本教程从零讲解 Jenkins 整套 CI/CD 自动化体系,覆盖理论、环境部署、双模式项目实战、高阶功能、生产安全规范五大核心板块。
从基础的 CI/CD 概念,到 Windows、Linux 双环境标准化部署,再到自由风格、流水线两种企业常用构建模式落地,最后覆盖参数化构建、定时任务、自动触发、凭据安全、日志排错等生产必备能力,形成完整的零基础学习闭环。
学完可独立完成中小型 Java 项目的自动化构建、测试、部署,具备基础 DevOps 实操与运维排错能力。
5.2 进阶学习路线
-
分布式集群:搭建 Master+Agent 多节点集群,实现分布式构建、负载均衡
-
Docker 容器化部署:实现代码打包、镜像构建、容器部署全容器化流程
-
K8s 云原生流水线:对接 Kubernetes,适配云原生项目自动化迭代
-
流水线高阶优化:并行构建、阶段重试、多环境分流、条件拦截
-
制品库管理:对接 Nexus,统一管理项目制品版本与权限
第六章 生产高阶补齐——企业刚需六大核心模块
6.1 模块一:Jenkins 备份、迁移、升级、降级(运维核心)
6.1.1 全量备份方案(生产必备定时备份)
Jenkins 所有核心数据均存放于工作目录 .jenkins,包含:任务配置、凭据、插件、构建记录、用户权限、全局配置。生产禁止手动零散备份,统一使用打包备份方案。
Linux 一键备份脚本
#!/bin/bash
# Jenkins 全量备份脚本
BAK_TIME=$(date +%Y%m%d_%H%M%S)
BAK_DIR=/data/jenkins_backup
JENKINS_HOME=/var/lib/jenkins
# 创建备份目录
mkdir -p $BAK_DIR
# 打包核心目录,排除超大缓存文件
tar -zcvf $BAK_DIR/jenkins_full_$BAK_TIME.tar.gz \
--exclude=workspace \
--exclude=cache \
--exclude=war \
$JENKINS_HOME
# 保留最近30天备份
find $BAK_DIR -name "jenkins_full_*.tar.gz" -mtime +30 -delete
可配置定时任务每日凌晨自动备份,保障配置不丢失。
6.1.2 跨服务器完整迁移方案
-
新服务器安装同版本 Jenkins、同 JDK 环境,不启动服务
-
停止旧服务器 Jenkins 服务
-
将旧机备份包解压覆盖新机
/var/lib/jenkins目录 -
修复目录权限:
chown -R jenkins:jenkins /var/lib/jenkins -
启动新机服务,所有任务、凭据、配置、插件全部无损迁移
6.1.3 平滑升级流程(零故障)
Jenkins 跨版本升级极易出现插件不兼容、配置失效,生产标准升级流程:
-
升级前执行全量备份
-
关闭 Jenkins 服务
-
执行 yum/安装包升级,保持大版本一致(LTS 之间升级)
-
启动服务,进入插件管理批量更新兼容插件
-
验证所有任务可正常构建,无报错
6.1.4 升级失败降级回滚方案
新版本插件兼容报错、服务启动异常时,立即回滚:
-
停止 Jenkins 服务
-
卸载新版本:
yum remove jenkins -
安装旧版 LTS 包
-
还原升级前全量备份文件
-
重启服务,恢复至升级前状态
6.2 模块二:多环境一键发布(测试/预发/生产隔离 + 人工卡点)
企业生产核心规范:一套流水线、多环境隔离、生产必须人工确认,杜绝测试代码误上线。
6.2.1 实现思路
-
通过参数化构建传入环境标识:test、pre、prod
-
根据环境自动切换:配置文件、服务器地址、数据库参数
-
测试/预发自动部署,生产环境增加人工审批卡点
6.2.2 多环境完整版流水线(可直接投产)
pipeline {
agent any
// 参数化构建:环境选择
parameters {
choice(name: 'ENV', choices: ['test', 'pre', 'prod'], description: '选择发布环境')
}
environment {
// 多环境动态地址
TEST_URL = 'http://测试服务器IP:8080/manager/text'
PRE_URL = 'http://预发服务器IP:8080/manager/text'
PROD_URL = 'http://生产服务器IP:8080/manager/text'
}
stages {
stage('代码拉取与编译') {
steps {
cleanWs()
git url: '你的Git地址', credentialsId: 'git-cred-id', branch: 'main'
sh 'mvn clean package -Dmaven.test.skip=false'
}
}
stage('环境适配打包') {
steps {
echo "当前发布环境:${ENV}"
// 可在此处执行profile打包、配置文件替换
sh "mvn package -P${ENV}"
}
}
stage('生产人工审批卡点') {
when {
environment name: 'ENV', value: 'prod'
}
steps {
// 生产环境手动确认,防止误发布
input message: '确认部署至生产环境?', ok: '确认上线'
}
}
stage('自动化部署') {
steps {
script {
def deployUrl = ""
if (ENV == "test") {
deployUrl = TEST_URL
} else if (ENV == "pre") {
deployUrl = PRE_URL
} else if (ENV == "prod") {
deployUrl = PROD_URL
}
deploy war: 'target/*.war',
contextPath: '',
tomcatUrl: deployUrl,
credentialsId: 'tomcat-cred-id'
}
}
}
}
post {
success { echo "${ENV}环境发布成功!" }
failure { echo "${ENV}环境发布失败!" }
}
}
6.2.3 生产规范说明
-
测试、预发环境:代码提交自动构建、自动部署,快速迭代验证
-
生产环境:必须人工点击确认,规避误操作、错分支发布
-
多环境配置完全隔离,互不干扰
6.3 模块三:流水线高阶语法(并行、重试、超时、条件判断)
基础流水线仅满足简单构建,生产复杂场景必须使用高阶语法,提升构建效率与稳定性。
6.3.1 并行构建(提升50%+构建速度)
多模块项目、多测试用例可并行执行,替代串行构建,大幅节省耗时。
stage('并行测试与代码检查') {
parallel {
stage('单元测试') { steps { sh 'mvn test' } }
stage('代码规范检查') { steps { sh 'mvn sonar:sonar' } }
stage('依赖安全扫描') { steps { sh 'mvn dependency:check' } }
}
}
6.3.2 阶段失败自动重试
针对网络波动、依赖下载超时等偶发问题,配置自动重试,减少人工重跑。
stage('依赖拉取') {
options {
retry(count: 2) // 失败自动重试2次
timeout(time: 10, unit: 'MINUTES') // 10分钟超时熔断
}
steps {
sh 'mvn clean compile'
}
}
6.3.3 多条件分支判断
根据分支、环境、参数动态执行不同流程,适配复杂业务场景。
stage('差异化构建') {
steps {
script {
if (env.BRANCH_NAME == 'main') {
echo "主干分支,执行全量打包与部署"
} else if (env.BRANCH_NAME == 'dev') {
echo "开发分支,仅执行编译与测试"
} else {
echo "其他分支,仅校验不部署"
}
}
}
}
6.4 模块四:Jenkins 性能调优 + 分布式集群构建
6.4.1 单节点性能调优(解决卡顿、排队、卡死)
Jenkins 默认内存极小,多任务并发极易卡顿,修改启动参数优化性能。
Linux 配置文件路径:/etc/sysconfig/jenkins
# 调整JVM内存,生产推荐配置
JENKINS_JAVA_OPTIONS="-Xms2048m -Xmx4096m -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
调优参数说明:
-
-Xms:初始内存 2G
-
-Xmx:最大内存 4G(根据服务器配置可上调至8G)
-
G1垃圾回收,降低GC卡顿
同时限制全局最大并发构建数,避免任务堆积拖垮服务。
6.4.2 Master+Agent 分布式集群搭建
6.4.2.1 集群原理
Master 节点只负责调度、管理、存储配置,不执行业务构建;多台 Agent 从节点分担构建任务,实现负载均衡、任务隔离。
6.4.2.2 集群环境前置要求
-
Master 与所有 Agent 节点时间同步、网络互通,关闭防火墙与 SELinux
-
所有节点统一 JDK11 环境,保证编译运行环境一致,避免版本兼容问题
-
Agent 节点无需安装 Jenkins 完整服务,仅需配置 JDK 运行环境即可
-
所有节点统一 Maven、Git 工具版本与环境变量,规避构建环境差异问题
6.4.2.3 从节点(Agent)配置步骤
-
Master 端创建节点 Jenkins 控制台 → 系统管理 → 节点管理 → 新建节点,输入节点名称,选择「永久代理节点」。配置节点可用内存、并发构建数、工作目录,关联节点专属标签,用于精准调度任务。
-
配置节点连接方式 选择 SSH 方式连接 Agent 节点,填写从节点服务器 IP、SSH 端口,配置服务器 SSH 凭据,测试连通性,确保 Master 可免密、正常连接从节点。
-
启动代理服务 连通性校验通过后,Master 会自动推送代理程序至 Agent 节点,自动启动代理服务,节点状态显示为「在线」即配置成功。
6.4.2.4 流水线指定节点执行
通过节点标签精准分配构建任务,实现任务隔离与负载分发,核心脚本如下:
pipeline {
// 指定带test-node标签的从节点执行任务
agent { label 'test-node' }
stages {
stage('节点分布式构建') {
steps {
echo "当前执行节点:${env.NODE_NAME}"
sh 'mvn clean package'
}
}
}
}
6.4.2.5 集群核心优势
-
负载分流:多节点分担构建压力,解决单节点任务排队、卡顿、超时问题
-
环境隔离:测试、预发、生产任务可分配至不同节点,环境完全隔离,互不干扰
-
高可用:单节点故障不影响整体集群运行,保障 CI/CD 流程持续可用
-
弹性扩展:可随时新增 Agent 节点,快速扩容构建能力,适配业务迭代增量
6.5 模块五:Jenkins 权限管控与用户体系(生产安全刚需)
默认 Jenkins 所有用户拥有最高权限,生产环境极易出现误操作、配置篡改、权限泄露风险,必须搭建分级用户权限体系。
6.5.1 必备权限插件
需提前安装 Role-Based Authorization Strategy 角色权限插件,实现精细化权限管控。
6.5.2 权限分级方案(企业通用)
-
超级管理员:拥有全平台所有权限,仅运维负责人持有,负责系统配置、插件管理、权限分配、系统升级
-
项目管理员:仅负责指定项目的构建、配置修改、日志查看、制品下载,无系统级操作权限
-
普通开发者:仅拥有构建触发、日志查看权限,禁止修改项目配置、删除构建记录
-
访客权限:仅可查看项目信息与构建记录,无任何操作权限,适配测试、实习人员
6.5.3 核心配置步骤
-
系统管理 → 全局安全配置 → 安全策略,切换为「基于角色的权限策略」
-
创建全局角色,配置系统级通用权限,禁止普通用户访问系统管理、插件管理、凭据管理页面
-
创建项目专属角色,绑定对应项目,配置项目内精细化操作权限
-
新建用户,分配对应角色,实现一人一权限,权限精准管控
6.6 模块六:Jenkins 故障排查与生产应急预案
6.6.1 服务启动失败应急预案
-
端口冲突:通过
netstat -lnp | grep 8080查询端口占用进程,终止占用程序或修改 Jenkins 启动端口 -
JVM 内存溢出:调整 JVM 启动参数,降低初始内存与最大内存,重启服务;长期卡顿需优化并发构建数
-
配置文件损坏:加载最近一期备份文件,覆盖破损配置,快速恢复服务
6.6.2 构建任务失败通用排查流程
-
查看控制台日志,检索 Error、Exception、Failed 核心报错关键字
-
区分环境问题、代码问题、配置问题、网络问题四大类报错
-
优先清空工作空间缓存、重试构建,排除缓存污染导致的偶发报错
-
核对凭据、路径、环境变量、分支配置,修正配置错误
-
依赖、网络类报错开启阶段重试,规避临时网络波动问题
6.6.3 流水线常见致命报错解决
-
凭据匹配失败:核对脚本内凭据 ID 与系统凭据 ID 完全一致,区分 Git、Tomcat、服务器不同凭据类型
-
目录权限不足:赋予 Jenkins 工作空间目录读写执行权限,修复 Linux 目录属主属组
-
脚本语法报错:使用 Jenkins 内置流水线语法校验工具,排查括号、引号、变量书写错误
-
部署403/404:校验 Tomcat 远程部署权限配置、部署路径、访问地址是否规范
第七章 最终生产落地规范(企业上线标准)
7.1 环境标准化规范
-
统一使用 JDK11 + Jenkins LTS 稳定版,禁止使用测试迭代版用于生产
-
系统插件仅安装官方认证插件,定期批量更新修复高危漏洞
-
替换国内镜像源,彻底解决插件、依赖下载超时问题
-
服务器环境固定配置,留存环境文档,杜绝随意修改系统参数
7.2 流水线落地规范
-
生产项目统一使用声明式流水线,禁止使用自由风格项目承载正式业务
-
Jenkinsfile 纳入 Git 版本管理,流水线脚本可追溯、可回滚、可复用
-
严格执行多环境隔离:测试/预发自动部署,生产人工审批卡点
-
所有流水线必须配置:工作空间清空、超时熔断、失败重试、日志留存、制品归档
7.3 安全运维规范
-
所有敏感凭据加密存储,禁止明文配置,定期轮换密钥与密码
-
严格权限分级,最小权限分配原则,杜绝普通用户拥有超管权限
-
每日自动全量备份,保留30天备份记录,定期演练回滚流程
-
开启全量日志审计,记录所有构建、配置修改、用户操作记录
-
禁止在流水线中配置高危系统命令,严控服务器操作权限
7.4 日常运维规范
-
定期清理历史构建记录、过期制品、缓存文件,释放服务器磁盘空间
-
监控服务内存、CPU、磁盘使用率,提前规避服务卡顿、宕机风险
-
每季度完成一次 Jenkins 版本平滑升级与插件兼容更新
-
留存完整运维文档:环境配置、流水线脚本、报错解决方案、备份回滚流程
7.5 磁盘运维核心:构建制品全自动清理策略(解决生产磁盘爆满)
生产环境长期运行Jenkins,历史构建日志、缓存文件、冗余war/jar制品会持续占用磁盘,极易导致磁盘爆满、服务宕机、构建失败。本节提供全局默认规则+单项目精细化规则+流水线自动清理三重终极方案,全自动运维,无需人工干预。
7.5.1 全局通用清理规则(所有项目生效)
系统管理 → 全局安全配置 → 全局构建保留策略,统一配置企业标准:
-
最大保留构建数量:15条
-
构建记录最大留存时长:15天
-
自动删除过期构建日志、控制台输出、临时缓存
-
仅保留最新5个版本的制品包,自动清理老旧部署包
7.5.2 单项目精细化清理配置
针对核心生产项目,单独配置更严格的留存规则,适配磁盘紧张场景:项目配置 → 丢弃旧的构建,开启自动清理,单独设置留存数量与时长,优先级高于全局规则。
7.5.3 流水线内置自动清理脚本(零缓存构建)
所有生产流水线强制加入工作空间清空逻辑,每次构建前后自动清理缓存、冗余文件,从源头杜绝磁盘堆积:
pipeline {
agent any
// 全局构建清理配置
options {
buildDiscarder(logRotator(
maxNumToKeepStr: '10', // 保留最新10条构建
maxDaysToKeepStr: '10', // 10天前构建自动删除
artifactNumToKeepStr: '5', // 仅保留5个最新制品
artifactDaysToKeepStr: '7'// 制品7天自动清理
))
timeout(time: 15, unit: 'MINUTES')
retry(count: 2)
}
stages {
stage('前置清理') {
steps {
// 强制清空工作空间所有缓存
cleanWs(deleteDirs: true)
echo "工作空间缓存、历史冗余文件清理完成"
}
}
// 后续构建流程不变
}
}
7.5.4 系统定时全局磁盘清理(兜底方案)
配置Linux系统定时任务,每周自动清理Jenkins全局缓存、过期日志、无用依赖,兜底保障磁盘稳定:
# 每周日凌晨4点自动清理Jenkins缓存与过期文件
0 4 * * 0 rm -rf /var/lib/jenkins/workspace/* /var/lib/jenkins/cache/*
7.5.5 生产磁盘运维规范
-
禁止手动堆积制品包、测试构建记录,所有项目强制开启自动清理规则
-
核心生产制品如需长期留存,单独归档至制品库(Nexus),不占用Jenkins服务器磁盘
-
每日监控磁盘使用率,配合自动清理策略,彻底规避磁盘爆满故障
第八章 附录:高频命令与配置速查表
8.1 Jenkins 服务启停命令(Linux)
# 启动服务
systemctl start jenkins
# 停止服务
systemctl stop jenkins
# 重启服务
systemctl restart jenkins
# 查看运行状态
systemctl status jenkins
# 设置开机自启
systemctl enable jenkins
# 关闭开机自启
systemctl disable jenkins
8.2 常用 Cron 定时表达式速查
-
每10分钟构建:
*/10 * * * * -
每2小时整点构建:
0 */2 * * * -
每日凌晨1点构建:
0 1 * * * -
每周一凌晨2点构建:
0 2 * * 1 -
每月1号凌晨3点构建:
0 3 1 * *
8.3 流水线高频通用片段
8.3.1 清空工作空间
steps {
cleanWs()
echo "工作空间清空完成,开始全新构建"
}
8.3.2 构建超时与重试配置
options {
timeout(time: 15, unit: 'MINUTES')
retry(count: 2)
}
8.3.3 构建结果消息推送
post {
success {
echo "✅ 构建部署成功,环境:${ENV}"
}
failure {
echo "❌ 构建部署失败,环境:${ENV},请及时排查"
}
always {
echo "本次构建结束,构建编号:${BUILD_NUMBER}"
}
}
8.4 核心路径速查(Linux)
-
Jenkins 工作根目录:
/var/lib/jenkins -
初始密码文件路径:
/var/lib/jenkins/secrets/initialAdminPassword -
服务配置文件路径:
/etc/sysconfig/jenkins -
系统日志路径:
/var/log/jenkins/jenkins.log