基于 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,枚举 体现 享元模式门面模式 前提 假设做…