首页 > 解决方案 > 尝试更新一些旧 Jenkins 作业的配置时出现 ERR_CONNECTION_RESET 错误

问题描述

构建服务器上的一些较旧的 Jenkins 作业无法通过 Web GUI 更新。我可以使用诸如作业配置历史插件之类的东西回滚到较旧的配置,但正常更新会导致它在浏览器底部显示一些内容,例如Uploading (79%),进度高达 9x%,最终它在 Chrome 中出现错误ERR_CONNECTION_RESET

它不适用于其他旧工作,只有一小部分。我跑了他们的差异,config.xml没有什么突出的。

我也已经卸载了 MultiSCM 插件,这显然在过去引起了类似的问题。

当这些更新失败时,我不会在 Jenkins 日志本身中收到任何警告或错误。

我还将 Jenkins 更新为最新的 LTS 以及所有插件。

知道发生了什么或如何解决它吗?

在 JavaMelody 中,它看到 POST 失败,但没有说明原因:

标签: jenkinsjenkins-pluginshudsonhudson-plugins

解决方案


由于不知道错误的来源,因此调试起来非常烦人。jenkins 日志在FINEST和之间没有任何帮助SEVERE。在与我们的 devops 负责人合作了几天后,我们在系统或服务器设置上找不到任何改变行为的东西。

我在 GitHub 上遇到了一个有类似问题的人,他说对于他们的一个插件,如果有一个额外的EOL符号,它就会中断。这让我想到,这可能是插件输入的解析错误吗?

首先,我禁用了所有不是构建步骤的东西。这没有解决任何问题。然后我开始在构建步骤部分一次删除一种插件类型,并最终将其缩小到Windows Batch Command构建步骤。通过反复试验,我确定它是 3 批中的 1 批,并将其调试到最后一行。这是批次中隐藏的部分:

@echo off
SetLocal EnableDelayedExpansion EnableExtensions
REM ...
call MsBuild.exe %SLN_FILE% /p:Configuration="%Build_Configuration%" /p:Platform="x86" -m -nodeReuse:false>nul 2>&1
if not "%errorlevel%"=="0" (
    echo Preliminary build initially failed. Running with console output next
    call MsBuild.exe /t:rebuild %SLN_FILE% /p:Configuration="%Build_Configuration%" /p:Platform="x86" -m -nodeReuse:false
    if not "!errorlevel!"=="0" echo Preliminary x86 build failed. Exiting early... & exit /b 1
)
REM ...
exit /b 0

戴上我的解析错误思维帽,我重构了这个,

if not "!errorlevel!"=="0" echo Preliminary x86 build failed. Exiting early... & exit /b 1

入此,

if not "!errorlevel!"=="0" (
    echo Preliminary x86 build failed
    echo Exiting early
    exit /b 1
)

它又开始工作了。因此,这可能是 Jenkins 消费端的解析错误,但实际的错误来源可能是Windows Batch Command模块,当它的输入被格式化以转义特殊字符时。

供参考!:)


推荐阅读