Это было очень неприятно для отладки из-за незнания источника ошибки. Ни один из журналов Дженкинса не был полезен между FINEST
и SEVERE
. После работы с нашим лидером devops в течение нескольких дней мы не смогли найти ничего в системе или настройках сервера, которые бы изменили поведение.
Я столкнулся с кем-то, у кого была похожая проблема на GitHub, и сказал, что для одного из их плагины, он сломался бы, если бы был дополнительный символ EOL
. Это заставило меня задуматься, может ли это быть ошибкой синтаксического анализа для ввода плагина?
Сначала я отключил все, что не было шагом сборки. Это ничего не исправило. Затем я начал удалять по одному типу плагинов за раз в разделе «Шаг сборки» и в итоге сузил его до Windows Batch Command
шагов сборки. Методом проб и ошибок я определил, что это был 1 из 3 пакетов, и отладил его до одной строки. Это была та часть пакета, где она была спрятана:
@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
в this,
if not "!errorlevel!"=="0" (
echo Preliminary x86 build failed
echo Exiting early
exit /b 1
)
И он снова начал работать. Так что это, вероятно, ошибка синтаксического анализа на стороне, потребляющей Jenkins, но фактическая причина возникновения ошибки - это, вероятно, модуль Windows Batch Command
, когда его входные данные форматируются для экранирования специальных символов.
FYI! :)