ERR_CONNECTION_RESET 尝试更新一些旧 Jenkins 作业的配置时出错

ERR_CONNECTION_RESET error when trying to update the configuration of some old Jenkins jobs

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

其他旧工作不做,只有一小部分。我 运行 与他们的 config.xml 不同,没有什么突出的。

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

当这些更新失败时,我没有在 Jenkins 日志中收到任何类型的警告或错误。

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

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

在 JavaMelody 中,它看到 POST 失败,但没有给出任何原因的指示:

由于不知道错误的来源,调试起来很烦人。 None 的詹金斯日志在 FINESTSEVERE 之间很有帮助。在与我们的 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 模块,当它的输入被格式化为转义特殊字符时。

仅供参考! :)