在日常的 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 缓存效率不如归档);
  • 文件 导入 / 导出 使用的 Jenkins 默认的 当前工作目录(workspace),若要使用其他路径:
    • 复制文件到 workspace 下再导入 / 导出文件到 workspace 下再复制到指定目录;

    • 使用 dir() 块切换路径:

      # 导入
      dir('/home/swt_jenkins/jenkins/backup') {stash includes: 'file.txt', name: 'file'
      }
      # 导出               
      dir('/home/swt_jenkins/jenkins/backup') {unstash 'file'
      }
      

✅ 最终推荐选择

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

🧩 结语

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/92334.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/92334.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/92334.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java中AQS原理

一、核心架构&#xff1a;AQS抽象队列同步器二、AQS核心机制1. 三大核心组件&#xff1a;state状态变量&#xff1a;volatile int&#xff0c;表示锁状态&#xff08;0未锁定&#xff0c;≥1锁定/重入次数&#xff09;CLH队列&#xff1a;双向链表实现的线程等待队列Node节点&a…

深入理解程序链接机制:静态链接、ELF加载与动态库实现原理

目录 一、静态链接 1、静态链接的基本概念 1. 静态链接实例分析 2. 目标文件分析 3. 关键观察 4. 重定位机制 5. 注意事项 2、静态链接过程详解 1. 目标文件反汇编分析&#xff08;上面已分析&#xff09; 2. 符号表分析 code.o 符号表 hello.o 符号表 3. 链接后的…

python基础复习

复习python基础语法,最好能做到使用python 写一些简单的算法。 1基础基础语法 1.0 输入输出 一个实用的print:format函数print(站点列表 {0}, {1}, 和 {other}。.format(Google, Runoob, other=Taobao)) 站点列表 Google, Runoob, 和 Taobao。print("a", "b…

ZLMediaKit 入门

什么是ZLMediaKit&#xff1f; ZLMediaKit 是一个基于C11的高性能流媒体服务器框架&#xff0c;支持RTSP/RTMP/HLS/HTTP-FLV/WebSocket-FLV等多种流媒体协议。它具有以下特点&#xff1a; 跨平台支持&#xff08;Linux、Windows、macOS&#xff09; 高性能&#xff0c;支持高…

接口测试Postman工具高级使用技巧

目录 一、环境与变量的深度应用 多环境动态切换 动态变量与脚本生成 二、Pre-request Script 的妙用 参数签名/加密 接口依赖处理 三、Test Script 的进阶断言 复杂 JSON Schema 校验 数据库断言 四、数据驱动测试 CSV/JSON 文件驱动 动态生成测试用例 环境与变量的…

ZooKeeper学习专栏(四):单机模式部署与基础操作详解

文章目录前言一、单机模式部署架构图部署流程&#xff1a;二、zkCli.sh命令行工具基础操作三、ACL权限控制实践学习资源前言 本文是Zookeeper学习系列的第四篇&#xff0c;将详细讲解Zookeeper的单机模式部署过程以及基础命令行操作&#xff0c;包括节点管理、Watcher机制和AC…

静态登录界面

代码&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>用户登录</title><st…

Three.js 全景图(Equirectangular Texture)教程:从加载到球面映射

全景图(Equirectangular Texture)是一种特殊的 2D 图像,能通过数学转换模拟 360 环绕视角,常用于创建沉浸式环境(如虚拟全景、天空盒替代方案)。本文将通过完整示例,带你掌握 Three.js 中全景图的加载、映射原理与实际应用。 什么是全景图(Equirectangular Texture)?…

Rocky Linux 9 快速安装 Node.js

Rocky Linux 9 快速安装 Node.js 大家好&#xff0c;我是星哥&#xff01;今天给大家带来 Rocky Linux 9 环境下 Node.js 的安装教程。 本文将详细介绍两种安装方法&#xff0c;帮你快速搭建稳定的 Node.js 环境。 Node.js 是一个非常流行的 JavaScript 运行时环境&#xff…

.NET依赖注入IOC你了解吗?

IOC在Web API 中是经常使用的&#xff0c;但是在一些WPF项目并不是经常使用或者被人熟知的&#xff0c;我把相关依赖注入的内容又做了一次学习和整理什么是依赖注入&#xff1f; 依赖注入是一种设计模式和软件设计原则&#xff0c;用于实现 控制反转。它的核心思想是&#xff1…

Python----大模型(基于Fastapi+streamlit的机器人对话)

一、准备工作 1.1、魔搭社区下载大模型 通义千问2.5-7B-Instruct 模型库 from modelscope.hub.snapshot_download import snapshot_download llm_model_dir snapshot_download(Qwen/Qwen2.5-7B-Instruct,cache_dirmodels) 1.2、启动vllm大模型 python -m vllm.entrypoint…

前端面试专栏-工程化:29.微前端架构设计与实践

&#x1f525; 欢迎来到前端面试通关指南专栏&#xff01;从js精讲到框架到实战&#xff0c;渐进系统化学习&#xff0c;坚持解锁新技能&#xff0c;祝你轻松拿下心仪offer。 前端面试通关指南专栏主页 前端面试专栏规划详情 微前端架构设计与实践 一、微前端核心概念与价值 …

Spring Boot音乐服务器项目-上传音乐模块

项目结构图 相较于上次新增集中在这些地方&#xff1a; &#x1f680; 上传音乐的核心流程 前端投递&#xff1a;用户填写歌手名 选择MP3文件 后端接收&#xff1a;/music/upload 接口化身音乐快递员 安全验证&#xff1a;先查用户是否“持证上岗”&#xff08;登录态&#…

2025年远程桌面软件深度评测:ToDesk、向日葵、TeamViewer全方位对比分析

随着远程办公和数字化协作的深入发展&#xff0c;远程桌面软件已经成为个人用户和企业的必备工具。在2025年的今天&#xff0c;远程控制软件市场呈现出百花齐放的态势&#xff0c;其中ToDesk、向日葵和TeamViewer作为市场上的三大主流选择&#xff0c;各自在技术创新、性能优化…

深度学习-全连接神经网络2

六、反向传播算法 反向传播&#xff08;Back Propagation&#xff0c;简称BP&#xff09;算法是用于训练神经网络的核心算法之一&#xff0c;它通过计算损失函数&#xff08;如均方误差或交叉熵&#xff09;相对于每个权重参数的梯度&#xff0c;来优化神经网络的权重。 1、前…

C语言的历史

C 语言是一种 通用的、过程式的编程语言&#xff0c;由 丹尼斯里奇&#xff08;Dennis Ritchie&#xff09; 在 1972 年于贝尔实验室开发。它以 高效、灵活、贴近硬件 而著称&#xff0c;广泛应用于系统软件、嵌入式系统、驱动程序、游戏引擎、数据库系统等底层开发领域。 C语…

jupyter使用

启动win rcmdjupyter notebook创建python文件

linux 环境服务发生文件句柄泄漏导致服务不可用

问题描述&#xff1a;服务调用远程rest接口 报错&#xff0c;发生too many open files 异常&#xff0c;系统句柄资源耗尽&#xff0c;导致服务不可用。排查经过&#xff1a;1、针对报错代码进行本地构建&#xff0c;构造异常&#xff0c;并进行压测。问题未复现2、经过讨论分析…

手机录制视频时,硬编码和软编码哪个质量高?(硬件编码、软件编码)

文章目录**1. 画质对比**- **软编码**&#xff1a;- **硬编码**&#xff1a;**2. 性能与功耗**- **软编码**&#xff1a;- **硬编码**&#xff1a;**3. 实际应用中的权衡****4. 现代手机的折中方案****5. 如何选择&#xff1f;****总结**在手机录制视频时&#xff0c; 软编码的…

IPv4与IPv6双栈协议:网络过渡的关键技术

为什么需要IPv4与IPv6共存&#xff1f; 在网络技术的世界中&#xff0c;兼容性问题始终是最大的挑战之一。IPv4和IPv6之间存在根本性的不兼容性&#xff0c;这意味着使用不同协议的设备无法直接通信。这种情况就像是两个人试图用完全不同的语言进行对话一样。 目前的网络现状…