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

多个 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.lryc.cn/news/575264.html

相关文章:

  • 联邦学习差分隐私系统的参与角色、密钥分发及攻击分析
  • 爽提配送:以专业守护校园,用匠心重塑安全
  • 理论加案例,一文读懂数据分析中的分类建模
  • 科技筑防线 智慧守平安——中物九联携硬核科技亮相四川防灾减灾盛会
  • 【MySQL】12. C语言与数据库的连接
  • 区间求最值问题高效解决方法
  • 深入理解残差网络(ResNet):原理与PyTorch实现
  • 搭建自己的WEB应用防火墙
  • RabbitMq中启用NIO
  • 【评估指标】IoU 交并比
  • 工业“三体”联盟:ethernet ip主转profinet网关重塑设备新规则
  • 智哪儿专访 | Matter中国提速:开放标准如何破局智能家居“生态孤岛”?
  • Selenium 二次封装通用页面基类 BasePage —— Python 实践
  • GBDT:梯度提升决策树——集成学习中的预测利器
  • Git上传代码如何解决Merge冲突
  • 时序数据库 TDengine 助力华锐 D5 平台实现“三连降”:查询快了,机器少了,成本也低了
  • 【目标检测】平均精度(AP)与均值平均精度(mAP)计算详解
  • MicroPython网络编程:AP模式与STA模式详解
  • 大塘至浦北高速分布式光伏项目,让‘交通走廊’变身‘绿色能源带’
  • 深度学习入门--(二)感知机
  • python的kivy框架界面布局方法详解
  • react中使用3D折线图跟3D曲面图
  • Vue Devtools “Open in Editor” 配置教程(适用于 VSCode 等主流编辑器)
  • 大语言模型(LLM)初探:核心概念与应用场景
  • 【MongoDB】MongoDB从零开始详细教程 核心概念与原理 环境搭建 基础操作
  • DeepSeek模型接入LangChain流程(详细教程)
  • 永磁同步电机无速度算法--基于同步旋转坐标系锁相环的滑模观测器
  • PYTHON从入门到实践6-字典
  • MCP2518FD发送时有时候多发数据包问题
  • 【预告 大模型应用开发实战专栏 升级】将增加《大模型 Agent 应用实战指南》专题赋能 Agent 开发者