多個 Job 并發運行時共享配置文件導致上下文污染,固化 Jenkins Job 上下文

基于 context.py 固化 Jenkins Job 上下文的完整方案,適用于你當前的工作流(Python + Jenkins Pipeline),解決:

  • 多個 Job 并發運行時共享配置文件導致上下文污染;
  • 讀取環境變量或 JSON 文件時被其他 Job 修改的問題;
  • 后續階段(如發送通知)讀取錯誤上下文的問題;

? 目標

在每個 Jenkins Job 開始時,將關鍵變量一次性固化到內存中,并在整個 Job 生命周期內始終使用這些值。


🧱 整體架構圖

[初始化階段]↓
env_step.py → 讀取 jenkins_config.json → 寫入 context.py.ctx↓
executor.py → 使用 context.py.ctx 中的變量執行用例↓
notification_sender.py → 使用 context.py.ctx 發送報告

📁 目錄結構建議

SuuntoTest/
├── jenkins/
│   ├── Jenkinsfile
│   ├── jenkins_config.json
│   ├── env_setup.py
│   ├── env_step.py        ← 初始化上下文
│   ├── executor.py        ← 執行測試用例
│   └── notification_sender.py  ← 發送報告
├── context.py             ← 全局上下文模塊
└── ...

🧩 實現步驟詳解

1?? 創建 context.py

# context.pyclass Context:def __init__(self):self.GIT_REPO_URL = Noneself.BRANCH = Noneself.WORKSPACE_DIR = Noneself.PLATFORM = Noneself.DEVICE_ID = Noneself.TESTCASE = Noneself.JENKINS_BUILD_URL = Noneself.NOTIFY_EMAIL = Noneself.JOB_URL = Noneself.SEND_METHOD = Noneself.BUILD_UR = Noneself.BUILD_NUMBER = None# 模塊級全局實例
ctx = Context()

2?? 編寫 env_step.py:初始化上下文

# jenkins/env_step.pyimport json
import os
from context import ctxconfig_path = os.path.join(os.path.dirname(__file__), "../jenkins/jenkins_config.json")with open(config_path, "r", encoding="utf-8") as f:config = json.load(f)# 將所有需要緩存的字段寫入 context.ctx
for key in vars(ctx):if key in config:setattr(ctx, key, config[key])print("? 上下文已初始化完成")
print("JOB_URL:", ctx.JOB_URL)
print("BUILD_NUMBER:", ctx.BUILD_NUMBER)

3?? 在 executor.py 中使用上下文

# jenkins/executor.pyfrom context import ctxprint("執行測試用例...")
print("當前構建號:", ctx.BUILD_NUMBER)
print("設備 ID:", ctx.DEVICE_ID)
print("平臺:", ctx.PLATFORM)
# 這里開始你的測試邏輯...

4?? 在 notification_sender.py 中使用上下文

# jenkins/notification_sender.pyfrom context import ctxprint("發送測試報告...")
print("Jenkins 構建地址:", ctx.JENKINS_BUILD_URL)
print("發送方式:", ctx.SEND_METHOD)
# 這里調用釘釘、郵件等通知接口...

🛠? Jenkins Pipeline 配置優化建議

確保 env_step.py 是整個流程的第一步。

pipeline {agent anystages {stage('Initialize Context') {steps {script {dir(env.WORKSPACE_DIR) {bat """@echo on.venv\\Scripts\\python.exe jenkins\\env_step.py"""}}}}stage('Run Tests') {steps {script {dir(env.WORKSPACE_DIR) {bat """@echo on.venv\\Scripts\\python.exe jenkins\\executor.py"""}}}}stage('Send Notification') {steps {script {dir(env.WORKSPACE_DIR) {bat """@echo on.venv\\Scripts\\python.exe jenkins\\notification_sender.py"""}}}}}
}

🔒 可選增強:防止并發構建

為了徹底避免并發沖突,可在 Jenkinsfile 中添加:

options {disableConcurrentBuilds(abortPrevious: true)
}

📌 最佳實踐總結

做法是否推薦說明
使用 context.py 存儲上下文? 強烈推薦獨立進程之間互不影響
在 Job 初始階段運行 env_step.py? 必須保證上下文盡早固化
后續腳本只讀取 context.ctx? 必須避免再次訪問配置文件
不再依賴 jenkins_config.json? 推薦提升穩定性
添加 disableConcurrentBuilds? 可選更安全控制并發

? 總結

通過 context.py 固化上下文,結合 Python 進程隔離特性,你可以安全地實現:
即使多個 Job 并發運行,每個 Job 的上下文也始終保持一致且獨立。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/86803.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/86803.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/86803.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

簡木易支付系統 功能齊全,對接接口超多

簡木易支付系統,作為一款引領行業潮流的卓越支付解決方案,依托先進的 PHP MySQL 技術架構精心打造。在開發過程中,它巧妙運用了功能強大的 ThinkPHP8 框架,完美融合前端主流技術 Vue、Element 以及 Layuiadmin,共同鑄…

【軟考高項論文】信息系統項目的人力資源管理

摘要 本文圍繞信息系統項目的人力資源管理展開論述。以我在2024年參與的為大型國有企業構建供應鏈管理系統項目為例,闡述了項目人力資源管理的主要流程,包括規劃、組建、建設和管理團隊四個過程,以及所運用的工具和理論。同時,分…

【EI會議征稿】東北大學主辦第三屆機器視覺、圖像處理與影像技術國際會議(MVIPIT 2025)

一、會議信息 大會官網:www.mvipit.org 官方郵箱:mvipit163.com 會議地點:遼寧沈陽 主辦單位:東北大學 會議時間:2025 年 9 月 27 日-9 月 29 日 二、征稿主題 集中但不限于“機器視覺、圖像處理與影像技術”等其…

從零開始的云計算生活——第二十三天,稍作休息,Tomcat

目錄 一.故事背景 二.Tomcat概述 1、Tomcat介紹 2、Tomcat歷史 二、Tomcat原理分析 1、Http工作原理 2、Tomcat整體架構 3、Coyote連接器架構 4、Catalina容器架構 5、Jasper處理流程 6、JSP編譯過程 7、Tomcat啟動流程 8、Tomcat請求處理流程 三、Tomcat安裝與配…

幾種基于Doherty結構的GAN氮化鎵功放設計方法介紹

功率放大器是現代無線通信系統中最重要的組件之一。理想情況下,它們能夠以高線性度和高效率提供高輸出功率。但通常在這三個關鍵的功率放大器性能參數之間需要進行權衡取舍,而且具有最高輸出功率和線性度的放大器往往會犧牲效率。 在支持寬帶寬和高數據…

前端打印計算單位 cm、mm、px

A4 縱向 寬:21cm,210mm,793.698px 高:29.7cm,297mm,1122.520px A4 橫向 寬:29.7cm,297mm,1122.520px 高:21cm,210mm,793.698px …

c# sugersql 獲取子表數據排序

在C#中使用Sugar ORM(一個流行的.NET ORM框架)獲取子表數據并進行排序,可以通過以下幾種方式實現: 1. 使用HasMany或HasOne配置 首先,確保你在配置實體時已經正確設置了HasMany或HasOne關系。例如,假設你…

【nRF52832】【環境搭建 3】【如何新建一個純單片機開發的工程】

1. 前言 笨叔,又要開始扯淡了!!! 不感興趣的同學,可以跳過了!!! 笨叔之前在大學里面, 剛接觸單片機時。就被 windows 平臺 例如 keill 5 、IAR 等一堆開會環境差點勸退。 當時也是堅持咬牙一點點摸索過來的。剛摸索明白,覺得單片…

Spring-loC與DI

目錄 1 loC控制反轉思想 2 DI依賴注入 3 loC詳解 3.1 存儲Bean (1)Controller (2)Service (3)Repository (4)Component (5)Configuration &#xf…

職業本科單片機與嵌入式技術實訓室建設設想

一、引言 在當今數字化與智能化飛速發展的時代,單片機與嵌入式技術作為信息技術領域的關鍵支撐,廣泛應用于工業控制、智能家居、物聯網、汽車電子等眾多行業,成為推動產業升級和創新發展的核心驅動力。職業本科教育旨在培養適應生產、建設、…

傳統消防演練與 VR 消防演練的區別有哪些

演練形式:傳統消防演練往往依托真實的場地,像空曠的廣場、廢棄的建筑物或是專門的消防訓練基地等。參與者能觸摸并使用實實在在的消防設備,例如干粉滅火器、二氧化碳滅火器、消防水帶等。在演練時,會通過點燃模擬火源、釋放煙霧等…

【零基礎學AI】 第6講:數據可視化基礎

本節課你將學到 理解數據可視化在AI中的重要作用 掌握Matplotlib的基本架構和核心概念 學會創建各種類型的圖表(線圖、柱狀圖、散點圖、餅圖等) 掌握圖表美化和自定義技巧 完成銷售趨勢圖表制作實戰項目 開始之前 什么是數據可視化? 數據可…

基于SSM+JSP 的旅游管理系統

【旅游景點管理系統】【送文檔】|SSM | JSP 【運行開發環境】 jdk1.8 idea mysql maven tomcat 【技術棧】 Spring SpringMVC mybatis JSP 【項目功能】 兩個角色;管理員功能有游客管理、輪播圖管理、景點管理、景點類型管理;普…

系統 | 電腦重置 圖文教程

背景: 換內存條,換完,聲卡網卡崩盤,分析原因可能是未斷電操作(什么光感自動斷電 還是手動的香),網卡由于代理沒關,關完即可。聲卡一直沒好,電腦店說是硬件問題;自行排查了…

MyBatis深度面試指南

一、MyBatis核心解析:半ORM框架的底層真相 1. 本質與工作流 半ORM定義: 對象映射:通過ResultMap將ResultSet自動轉為Java對象(省去JDBC手動映射)。SQL控制:開發者需手動編寫SQL,框架不自動生成(與Hibernate核心區別)。工作流四步: 解析mybatis-config.xml → 構建Sq…

使用Docker部署mysql8

1、拉取mysql8的鏡像: 1 [rooti-zgn6som8 ~]# docker pull mysql:8.0 2、創建配置和數據文件夾并修改權限: 1 2 3 4 mkdir -p /data/mysql8/conf mkdir -p /data/mysql8/data chmod -R 755 /data/mysql8/ 3、配置一個自定義的配置文件my.cnf: 1 …

Vue3—插槽solt

默認插槽 父組件 <Sidebar><div>{{ strData }}</div></Sidebar> let strData ref(我是你爸爸真偉大&#xff0c;養你這么大);//定義插槽數據子組件 <slot>沒有數據&#xff0c;我先默認顯示一下 loading。。。。。。。</slot>父組件提供…

時間同步 gptp ptp

目錄 車載以太網PTP報文分析**PTP協議基礎****PTP報文類型與功能****PTP報文格式解析****時鐘同步原理與計算****車載以太網PTP分析工具****典型分析場景****車載場景特殊考慮**gPTP與PTP的對比解析**1. 基本概念****2. 核心差異對比****3. 技術細節對比****報文結構****主時鐘…

AWS WebRTC:通過shell實現多進程啟動viewer

? 前面總結了aws webrtc sdk-c項目中多進程啟動master的shell腳本,具體參考:https://blog.csdn.net/zhang_jiamin/article/details/148616899 這次總結一下多進程啟動viewer的shell腳本,以及過程中遇到的問題和解決方法。 實現說明: 1、獲取 sid 和 uid(用于認證) 2、…

設計模式(策略,工廠,單例,享元,門面)+模板方法

文章目錄 前提策略模式思想實現如何拓展 模板方法存在的問題思想實現如何拓展 工廠模式實現問題及解決(解耦)配置文件方式使用注解 單例模式實現方式1,懶漢式(線程不安全)2,懶漢式(線程安全)3,餓漢式4,雙重校驗鎖機制(面)5,靜態內部類6,枚舉 體現 享元模式門面模式 前提 假設做…