当前位置: 首页 > news >正文

Jenkins 不同节点间文件传递:跨 Job 与 同 Job 的实现方法

在日常的 DevOps 运维实践中,Jenkins 通常被用于串联多个自动化流程,而这些流程往往需要在不同的构建节点(agent)上执行。例如,在以下场景中:


📌 场景需求描述(实际问题)

最近在一次部署任务中,我遇到这样一个需求:

  • Jenkins 的 a 节点 执行某些命令或脚本,生成一个临时文件或构建产物;
  • 然后需要 b 节点 获取这个文件,并继续执行后续处理(如压缩、上传、部署等);
  • a 节点与 b 节点不直接通信,它们都只能与 Jenkins master 通信;
  • 不希望直接打通 a 与 b 节点的网络 ACL,出于安全隔离考虑,希望通过 Jenkins 实现文件传递。

于是我研究并实现了两种可靠的解决方案,分享如下👇


方法一:跨 Job 文件传递(使用 archiveArtifacts + copyArtifacts 插件)

🎯 场景适用:

  • Job A 运行在 a 节点;
  • Job B 运行在 b 节点;
  • 两者在不同的 Jenkins Job 中;
  • 构建产物持久化后再被其他 Job 使用

📦 所需插件:

  • Copy Artifact Plugin
  • 安装方式:Jenkins 管理后台 → 插件管理 → 可用插件中搜索 copy artifact 并安装

🛠️ 原理说明:

阶段节点操作文件流向
Job Anode-a生成并归档文件(archiveArtifacts上传到 Jenkins master 构建归档目录
Job Bnode-b复制 Job A 的构建产物(copyArtifacts下载回 node-b 的工作目录

Jenkins 会将文件临时保存在 master 节点:

$JENKINS_HOME/jobs/JobA/builds/<构建号>/archive/...

📁 Job A:生成并归档文件(运行在 node-a

pipeline {agent { label 'node-a' }stages {stage('生成文件') {steps {sh 'echo hello-from-A > shared.txt'archiveArtifacts artifacts: 'shared.txt'}}}
}

📁 Job B:复制并处理文件(运行在 node-b

pipeline {agent { label 'node-b' }stages {stage('获取并处理文件') {steps {copyArtifacts(projectName: 'JobA',selector: specific('lastSuccessfulBuild'))sh 'cat shared.txt'sh 'echo 在 b 节点处理完成'}}}
}

✅ 优点:

  • 适用于不同 Job 间的构建产物传递;
  • 构建产物有历史记录可追溯,便于复查和调试;
  • 跨节点传输由 Jenkins master 中转,无需节点互通

⚠️ 注意事项:

  • 插件必须安装;
  • 文件必须通过 archiveArtifacts 显式上传,copyArtifacts 才能访问;
  • 传递的是“构建产物”,适合大文件或需要留痕的使用场景。

方法二:同一个 Job 跨节点传文件(使用 stash / unstash

🎯 场景适用:

  • 单个 Job 内存在多个 stage;
  • 每个 stage 在不同节点(agent)执行;
  • a 节点执行前置任务,b 节点执行后置处理,且只需传递中间文件

🛠️ 原理说明:

阶段节点操作文件流向
Stage Anode-a使用 stash 暂存文件a 节点 → Jenkins master 内部缓存
Stage Bnode-b使用 unstash 还原文件Jenkins master → b 节点工作目录

Jenkins 在执行 stash 时,会将指定文件上传到控制节点的临时缓存;
unstash 阶段再从缓存取出,恢复到当前节点的工作目录。


✅ 不需要任何插件,Jenkins Pipeline 原生命令支持。


📋 示例 Pipeline(a 和 b 节点在同一个 Job 的不同阶段):

pipeline {agent nonestages {stage('a 节点生成文件') {agent { label 'node-a' }steps {sh 'echo hello-from-a > file.txt'stash name: 'intermediate-file', includes: 'file.txt'}}stage('b 节点处理文件') {agent { label 'node-b' }steps {unstash 'intermediate-file'sh 'cat file.txt'sh 'echo b 节点处理完毕'}}}
}

✅ 优点:

  • 无需插件,Jenkins 原生命令支持;
  • 跨节点无感传输,适合流水线阶段串行任务;
  • 不需要构建产物留痕,避免污染归档记录。

⚠️ 注意事项:

  • stash/unstash 只在 同一个 Job 中有效,不能跨 Job 使用;
  • Jenkins 会将文件临时保存在控制节点目录,注意空间限制;
  • 大文件不建议使用此方式(stash 缓存效率不如归档);

✅ 最终推荐选择

场景推荐方法适用建议
Job A 生成 → Job B 处理archiveArtifacts + copyArtifacts多 Job 联动、构建产物管理
同一 Job,分节点执行stash / unstash简洁轻量、无插件依赖

🧩 结语

通过这两种方式,即使 a 和 b 两个 Jenkins agent 节点互相无法访问,只要它们能连接 Jenkins master,我们仍然可以实现跨节点的文件传输与任务协作。这不仅保证了系统的安全隔离,也增强了构建流程的灵活性。

http://www.lryc.cn/news/594599.html

相关文章:

  • 修复echarts由4.x升级5.x出现地图报错echarts/map/js/china.js未找到
  • 人形机器人CMU-ASAP算法理解
  • QGIS、ArcMap、ArcGIS Pro中的书签功能、场景裁剪
  • ruoyi-flowable-plus Excel 导入数据 Demo
  • 现在希望用git将本地文件test目录下的文件更新到远程仓库指定crawler目录下,命名相同的文件本地文件将其覆盖
  • 自动驾驶中各传感器的优缺点
  • 一个月掌握数据结构与算法:高效学习计划
  • uni-app 鸿蒙平台条件编译指南
  • vxe-table 通过配置 ajax 方式自动请求数据,适用于简单场景的列表
  • 网络基础1-11综合实验(eNSP):vlan/DHCP/Web/HTTP/动态PAT/静态NAT
  • MTSC2025参会感悟:大模型 + CV 重构全终端 UI 检测技术体系
  • C语言:深入理解指针(3)
  • cocos中实现3d人物角色头顶信息跟随功能,UI跟随3D/2D对象移动,例如昵称血条跟随人物移动
  • 【VASP】机器学习势概述
  • 智能合约安全 - 重入攻击 - 常见漏洞(第一篇)
  • taro微信小程序的tsconfig.json文件说明
  • Taro 本地存储 API 详解与实用指南
  • Typecho目录树插件开发:从后端解析到前端渲染全流程
  • 使用pymongo进行MongoDB的回收
  • Kali MSF渗透Windows 11电脑
  • Taro 路由相关 API 详解与实战
  • taro+pinia+小程序存储配置持久化
  • 微美全息(WIMI.US)聚焦多元哈希锁机制,为链上链下数据可信交互按下加速键
  • 快速入门SwiftUI
  • 【大模型】结构化提示词:让AI高效完成复杂任务的“编程语言”
  • JavaEE初阶第十期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(八)
  • 经典神经网络(vgg resnet googlenet)
  • LiteCoT:难度感知的推理链压缩与高效蒸馏框架
  • Apache IoTDB(2):时序数据库 IoTDB 集群安装部署的技术优势与适用场景分析
  • 卫朋:华为流程体系拆解系列之高阶流程L1-L3分解三阶七步法