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 緩存效率不如歸檔);
  • 文件 導入 / 導出 使用的 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;這意味著使用不同協議的設備無法直接通信。這種情況就像是兩個人試圖用完全不同的語言進行對話一樣。 目前的網絡現狀…