You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins中Hudson.AbortException(退出码-1073741819)的原因与解决

Jenkins Windows构建失败:exit code -1073741819 原因分析与修复方案

我有一套能在Windows和Linux上运行的Jenkins流水线脚本,Linux上跑完全正常,但在Windows系统里,测试阶段明明执行完成了,构建却因为Hudson.AbortException: script returned exit code -1073741819失败。虽然能用try-catch捕获异常,但我想搞清楚根本原因,以及怎么彻底修复。

相关代码

Jenkins流水线Groovy代码

try{
    bat"${workspace}\env\python\python.exe -m coverage run -a setup.py test"
    bat"${workspace}\env\python\python.exe -m coverage xml -i"
}
catch(err){
    echo "Error: ${err}"
    currentBuild.result = "FAILURE"
}

Python setup.py中的ThreadPool代码

tp = ThreadPool(workers)
for module in modules_list:
    tp.apply_async(test_module(module), (path_to_module_reports))
tp.close()
tp.join()

根本原因分析

  • exit code -1073741819对应Windows系统的STATUS_ACCESS_VIOLATION错误,本质是程序尝试访问了未授权的内存区域。
  • ThreadPool用法存在明显错误:apply_async第一个参数需要传函数对象,但你写的test_module(module)是直接执行了函数,把返回值传进去了,这会导致线程逻辑混乱,甚至触发内存错误。
  • Windows下coverage工具对多线程的支持不如Linux,加上Groovy脚本里的路径转义问题(单反斜杠会被解析为转义字符,导致路径无效),进一步加剧了问题。

修复方案

  • 修正ThreadPool调用方式
    把apply_async的参数写法改对,函数和参数分开传递:

    tp = ThreadPool(workers)
    for module in modules_list:
        # 第一个参数是函数对象,args是参数元组
        tp.apply_async(test_module, args=(module, path_to_module_reports))
    tp.close()
    tp.join()
    # 可选:加短暂等待确保线程资源完全释放
    import time
    time.sleep(1)
    
  • 修复Groovy中的路径问题
    Windows路径要用双反斜杠或者正斜杠,避免转义错误;同时可以去掉-a参数(追加覆盖数据),避免多线程下文件写入冲突:

    try{
        bat "${workspace}\\env\\python\\python.exe -m coverage run setup.py test"
        bat "${workspace}\\env\\python\\python.exe -m coverage xml -i"
    }
    catch(err){
        echo "Error: ${err}"
        currentBuild.result = "FAILURE"
    }
    
  • 更新coverage版本
    旧版本coverage在Windows多线程场景下存在兼容性bug,升级到最新版能解决不少此类问题。

内容的提问来源于stack exchange,提问作者Ajay Malik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 13:52:53