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

Python脚本抛异常时Jenkins流水线不失败的解决方法

Jenkins流水线Python异常时不标记失败的问题解决

问题背景

使用以下Jenkins流水线脚本时,即便module脚本因Python内部抛出异常而执行失败,Jenkins始终显示构建成功:

pipeline
{
    agent any
    stages
    {
        stage ('Init')
        {
            steps
            {
                sh 'cmd /C "C:\\Git\\cmd\\git.exe" submodule update --init --recursive --depth=1'
            }
        }
        stage ('Build')
        {
            environment {
                PATH = "C:\\cygwin64\\bin;C:\\Windows\\system32;C:\\Program Files\\Python310\\Scripts\\;C:\\Program Files\\Python310"
            }
            steps
            {
                bat 'cmd /C module release || exit /b'
            }
        }
}

相关脚本内容:

  • module.bat:
@echo off
set -e
python submodules/package-tools/module.py %*
  • module.py关键代码片段:
...
raise Exception('Error')

需求:Python抛出异常时,Jenkins自动标记构建失败,且不修改Python脚本本身(最初期望从Jenkins端解决)。

无效尝试

尝试了多种Jenkins bat命令写法,均未解决问题:

bat 'call module release'
bat 'call module release || exit /b'
bat 'module release || exit /b'
bat 'python submodules/package-tools/module.py release'

额外测试发现,执行以下命令时:

bat 'python submodules/package-tools/module.py release & echo %errorlevel%'

Jenkins会解析为:

python submodules/package-tools/module.py release   & echo 0

手动在服务器CMD执行该命令返回错误码9009,但Jenkins仍判定阶段成功。

最终解决方案

排查后发现问题出在Python代码中:原脚本通过os.system(...)调用其他Python代码,但未处理返回码。将这部分代码修改为:

rc = os.system('python ... .py ' + args)

if rc:
    sys.exit(n)

修改后,仅使用简单的Jenkins命令即可实现需求:

bat 'module release'

此时Python抛出异常时,Jenkins会正确标记构建失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 07:18:19