Jenkins 无内置任务间数据共享空间,但可通过共享库、归档产物、外部存储三种方式实现数据传递。共享库封装可复用逻辑;archiveArtifacts+copyArtifacts传递文件;NFS/Redis/Git等外部服务管理共享状态;禁止硬编码本地路径。

Jenkins 本身不提供内置的“任务间数据共享空间”概念,但可通过几种成熟、稳定的方式实现构建任务之间的数据传递与复用。关键不在于创建一个通用共享磁盘,而在于按场景选择合适的数据流转机制。
使用 Jenkins 共享库(Shared Libraries)封装公共逻辑
这是最推荐、最符合 Jenkins Pipeline 设计理念的方式。它不共享“文件”,而是共享“行为”和“结构”。
- 把重复使用的代码(如拉取代码、构建镜像、推送制品、发通知)写成 Groovy 方法,放在
vars/目录下(例如vars/buildDocker.groovy) - 在 Jenkins 系统配置中注册该 Git 仓库为全局共享库,启用 Load implicitly
- 所有 Pipeline 都能直接调用
buildDocker(imageName),无需复制脚本,也不依赖临时文件 - 更新一次库,所有引用它的任务立即生效,安全且可追溯
通过 Workspace + 构建产物归档(Archive Artifacts)传递文件
适用于需要跨阶段或跨任务传递编译产物、配置文件、测试报告等实际文件的场景。
- 在上游任务中使用
archiveArtifacts 'target/*.jar, config/*.yml'将指定路径下的文件打包存档 - 下游任务通过
copyArtifacts步骤拉取(需安装 Copy Artifact 插件):copyArtifacts from: 'upstream-job', filter: 'target/app.jar', target: 'libs/' - 注意:归档内容默认只保留最近 N 次构建(可在 Job 配置中设置),不是永久存储
借助外部存储统一存放中间数据
当多个任务需读写同一份数据(如版本号、部署状态、环境变量快照),不建议用 Jenkins 自身 workspace,而应使用外部服务:
-
NFS 或对象存储:将构建生成的镜像元数据、发布清单等写入挂载的 NFS 路径(如
/data/jenkins/shared/),各任务按约定路径读写 - 数据库或键值存储:用 Redis 记录当前灰度版本号,用 PostgreSQL 存储每次发布的 commit 和 tag 映射关系
- Git 作为状态存储:把部署标记、环境配置以 YAML 文件形式提交到专用配置仓库,Pipeline 通过 checkout + readJSON 拉取
避免依赖临时目录或节点本地路径
不要在 Pipeline 中硬编码 /tmp、/var/lib/jenkins/workspace 或其他节点绝对路径来“共享”数据。
- 多节点环境下路径不一致,易出错
- Workspace 可能被清理,数据不可靠
- 违反 Jenkins 分布式设计原则,降低可移植性和可观测性


















