Jenkins基础补充(五)
#距离jenkins系统文章已经过去了N多年,jenkins版本及使用方法已经发生了很大改变,这里借这篇文章回顾一下基础知识,起到承上启下的作用,基础牢固者可略过
一、Scaling Jenkins(扩展Jenkins)
官网文档:https://www.jenkins.io/doc/book/scaling/
1.1 jenkins目录结构
#之前没有讲jenkins的目录结构,这里就以当前最新版2.541.1举例

#先介绍文件
config.xml #Jenkins全局核心配置文件,包含Jenkins运行的基础配置:端口、工作目录、安全策略、全局工具配置、代理设置等,修改后重启Jenkins生效 hudson.model.UpdateCenter.xml #插件更新中心配置,定义Jenkins插件下载的源地址默认官方源 hudson.plugins.emailext.ExtendedEmailPublisher.xml #扩展邮件插件(Email Ext)全局配置,配置邮件发送的全局参数 hudson.plugins.git.GitTool.xml #Git工具的全局配置 identity.key.enc #身份加密密钥,Jenkins用于加密身份信息(如账号密码、远程服务器密钥)的核心文件 jenkins.install.InstallUtil.lastExecVersion #Jenkins最后执行的版本标识 jenkins.install.UpgradeWizard.state #升级向导状态文件,避免重复触发升级流程 jenkins.model.JenkinsLocationConfiguration.xml #Jenkins位置配置,定义Jenkins的访问地址、节点通信等的基础地址配置 jenkins.telemetry.Correlator.xml #Jenkins遥测配置,记录Jenkins的遥测标识,用于向官方上报基础运行数据 nodeMonitors.xml #节点监控配置,用于节点健康检查 org.jenkinsci.plugins.workflow.flow.FlowExecutionList.xml #流水线执行列表配置,记录Pipeline的运行实例状态、执行记录关联信息,用于流水线历史查询、断点续跑 queue.xml #任务队列配置,记录Jenkins等待执行的任务队列(如触发了多个Job但执行器不足时的排队信息),重启Jenkins后队列不会丢失 secret.key #Jenkins核心加密密钥,用于加密所有敏感数据(如密码、令牌、私钥),是Jenkins安全的核心文件,丢失后所有加密数据将无法解密 secret.key.not-so-secret #辅助加密密钥(非敏感),配合secret.key使用的轻量密钥,无敏感信息,仅做加密补充
#然后再介绍下目录
caches #Jenkins缓存目录,存储插件、更新中心、依赖包的下载缓存,减少重复下载;可手动删除,重启Jenkins后会重新生成,不影响核心功能 jobs #所有Job(任务)的核心存储目录,每个Job对应一个子目录,子目录内包含: #1.config.xml:该Job的专属配置(构建步骤、触发器、源码地址等); #2.builds:该Job的所有构建历史(按构建号命名,包含日志、产物、报告); #3.nextBuildNumber: 当前构建到的BuildId logs #Jenkins系统日志目录,存储Jenkins的运行日志、节点通信日志、插件日志 plugins #插件安装目录, 核心目录,每个已安装的插件对应一个子目录(插件名+版本),子目录内包含插件的jar包、配置文件、依赖; secrets #敏感信息存储目录,存储Jenkins的所有敏感数据 updates #插件更新缓存目录,存储插件更新中心的索引、插件版本列表、更新包缓存,配合UpdateCenter.xml使用,用于插件的检查更新、一键安装 userContent #Jenkins自定义静态资源目录、可存放自定义的静态文件(如图片、HTML、报告模板),通过JenkinsURL/userContent/[文件名]可直接访问 users #Jenkins用户信息目录,每个用户对应一个子目录(以用户ID 命名),子目录内包含config.xml(用户信息:昵称、邮箱、权限、加密后的密码) war #Jenkins WAR包解压目录,包含核心前端页面、后端类文件、默认配置;不可随意修改,修改后可能导致 Jenkins 启动失败 workspace #Job默认工作空间目录,每个Job的构建会在workspace/[Job名]下拉取源码、执行构建命令、生成中间产物
1.2 Glossary(词汇表)
基本词组:
Agent #代理,执行任务的节点 Artifact #这次构建任务,最后产出的"成品文件" Build #构建,作业单次执行的结果 Cloud #Cloud(动态代理节点)就是让Jenkins能"自动创建、用完就删"的代理节点 Controller #jenkins主节点也就是服务主控节点本身 Core #jenkins的应用程序 Downstream #下游,被当前任务自动触发的任务 Executor #执行数,一个节点能同时执行任务的数量 Fingerprint #指纹,给Jar/文件生成唯一指纹(唯一哈希值),用来追踪:这个文件是哪次构建生成的、被哪些任务用过。 Folder #用来给Jenkins任务分类、放一起的文件夹 Item # Jenkins里点[新建任务]出来的所有东西,全都叫Item Jenkins URL #用户访问的jenkins应用程序的主url Job #Jenkins里真正用来跑构建、打包、部署的任务 Kubernetes #就是你理解的K8S Label #给节点打"标签/分组标记",用来分配任务跑在哪个节点上面 LTS #长期稳定版 Node #能被Jenkins用来跑任务的机器,都叫Node。 Project #一个被废弃的术语,与job同义 Pipeline #用代码写的自动化部署流程 Plugin #插件,功能扩展包 Publisher #构建跑完之后,才执行的操作 Resource Root URL #专门放静态文件的"副域名" Release #版本上线 Stage #阶段,pipeline流程里面的每个阶段 Step #步骤,上面阶段里面的每一小步操作 Trigger #自动启动任务的开关,满足某个条件,Jenkins自己跑Job Update Center #更新中心 Upstream #上游任务,触发当前任务的前一个任务 View #视图,自定义的任务列表 Workspace #工作区,Job运行时,代码拉下来、打包、生成jar所在的那个文件夹
二、Pipeline学习
官网文档:https://www.jenkins.io/doc/book/pipeline/
#这里主要是跟着官方文档的结构学习一下Pipeline
2.1 Pipeline介绍
什么是Pipeline?
Jenkins本质上是一个支持多种自动化模式的自动化引擎。Pipeline为Jenkins添加了一组强大的自动化工具,支持从简单的持续集成到全面的CD管道的用例。通过对一系列相关任务进行建模,用户可以利用Pipeline的许多功能:
code(代码):管道在代码中实现,通常签入源代码管理,使团队能够编辑、审查和迭代他们的交付管道。 Durable(持久):管道可以在Jenkins控制器的计划内和计划外重启中生存。 Pausable(可暂停):管道可以选择停止并等待人工输入或批准,然后再继续运行管道。 Versatile(多功能):管道支持复杂的现实CD需求,包括分叉/连接、循环和并行执行工作的能力。 Extensible(可扩展):Pipeline插件支持对其DSL(写代码定义任务)的自定义扩展,以及与其他插件集成的多种选项。
声明式管道定义
在声明性管道语法中,管道块定义了整个管道中完成的所有工作。先来一个最简单的例子:
pipeline {
agent any //必须:指定执行任务的节点(any 表示任意可用节点)
stages { // 必须:定义流水线的所有阶段
stage('Build'){ // 至少一个stage
steps{ // 必须:该阶段要执行的具体操作
echo "This is Build" // 执行命令(如shell、git等),这里不能为空不然任务会报错
}
}
stage('Test'){
steps{
echo "This is Test"
}
}
stage('Deploy'){
steps{
echo "This is Deploy"
}
}
}
}#上面就是一个简单的声明式流水线的例子,是一种结构化、易读、面向声明式编程的DSL语法,核心是"声明要做什么"。只需要按照固定的语法结构定义流水线的目标(比如 “拉代码→编译→测试→部署”),Jenkins 会自动处理底层执行逻辑。
声明式管道内置的结构化关键字:
pipeline:顶层容器,包裹所有声明式逻辑(必须) agent:指定流水线执行的节点 stages:所有阶段的容器,至少包含一个 stage(必须) stage:单个阶段(如 “拉代码”“测试”),每个 stage 对应一个业务步骤 steps:单个阶段的具体操作(如执行 shell 命令、调用 maven) when:条件判断:仅当满足条件时执行该 stage(如仅 main 分支部署) parameters:定义流水线运行时的参数(如分支名、版本号) post:后置操作:流水线 / 阶段结束后执行(如成功通知、失败发邮件) environment:定义环境变量(如 ENV_NAME = 'prod')
脚本式管道定义
脚本式管道是基于 Groovy 语言 的全功能编程脚本,语法更灵活,更像传统的编程方式,适合需要复杂逻辑控,关注"如何做"。先来一个简单的例子:
node('linux'){
stage('拉取代码'){
echo '开始从Git仓库拉取代码...'
checkout([
$class: 'GitSCM', //指定Pipeline使用Jenkins Git插件(GitSCM类)来处理Git仓库的代码拉取;
branches: [[name: '*/main']], // 你的分支
userRemoteConfigs: [[
url: 'git@git.test.com:apache/seatunnel-web.git', // SSH格式URL
credentialsId: '5b6bbc50-3c8d-4912-8f92-9eee90d0fa0c' //对应SSH私钥的凭证ID,注意如果指定的node节点有git权限这里可以不加
]],
gitTool: 'Default' //GitSCM的参数:指定Jenkins配置的Git工具
])
echo '代码拉取完成!'
}
stage('编译构建') {
echo '开始执行Maven编译...'
try {
// 加载环境变量后执行mvn
sh '''
source /etc/profile
export PATH=$PATH
mvn -v # 先验证Maven版本
mvn clean package -DskipTests
'''
echo '编译构建成功!'
} catch (Exception e) {
echo "编译失败: ${e.getMessage()}"
error('构建终止,编译失败!')
}
}
}2.2 Blue Ocean介绍
#官方文档:https://www.jenkins.io/doc/book/blueocean/ #不过看官方文档这个插件不再功能更新了
Blue Ocean是Jenkins 的现代化可视化界面插件,专为Pipeline流水线设计,核心是让CI/CD流程更直观、易用、协作友好。
#插件安装就不介绍了,就是插件搜索Blue Ocean然后安装下就行,下面是安装后,去job任务点击Blue Ocean之后跳转界面效果:
#左上角的天气是健康图标:
太阳: 超过80%的运行成功 太阳有乌云: 61% to 80%的任务运行成功 多云:41% to 60%的任务运行成功 下雨:21% to 40%的任务运行成功 风暴:少于21%的任务运行成功
#中间位置点击运行就是开始执行此任务
#下面的状态是执行任务的状态列表信息,其中左边的状态图标分别对应:
转圈:进行中 绿色:通过 黄色:不稳定 红色:失败 灰色:已中止
#然后我们点击一个最近执行的任务就会跳入到详情页:![]()

#点击那个动作那个动作的圆圈变大,当前界面就显示的哪个动作的日志哦,现在是编译构建圆圈大所以显示的这个动作的日志
2.3 Stage View(完整阶段视图)介绍
#还是插件选择:Stage View
#这个插件的作用是:直观展示流水线执行流程、快速定位构建失败位置、查看阶段耗时、多分支/多次构建对比、直接进入阶段日志

