- 20, Oct 2024
- #1
Я пытаюсь выполнить исполняемый файл с сервера Jenkins, используя Windows cmd. Это то, что запускается из пакетного окна Jenkins Windows:
C:\> MyApp.exe >> appOut.txt
При регулярном запуске из командной строки приложение выводит на консоль отчет о своем прогрессе.
Когда я запускаю его из jenkins, я получаю следующее исключение (MyApp означает имя моего фактического приложения):
08:13:56 Started by user NO
08:13:56 Building remotely on SFM BSP builder (ComputerName) (projectName) in workspace C:\Jenkins\workspace\MyBuildMachine
08:13:56 Running Prebuild steps
08:13:56 [MyBuildMachine] $ cmd /c call C:\Windows\TEMP\jenkins3066529473565168228.bat
08:13:56
08:13:56 C:\Jenkins\workspace\MyBuildMachine> C:\Users\NO\Desktop\MyApp.exe
08:13:56
08:13:56 Unhandled Exception: System.IO.IOException: The handle is invalid.
08:13:56
08:13:56 at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
08:13:56 at System.Console.GetBufferInfo(Boolean throwOnNoConsole, Boolean& succeeded)
08:13:56 at MyApp.App.AppInit(String[] args)
08:13:56 at MyApp.Program.Main(String[] args)
08:13:56
08:13:56 C:\Jenkins\workspace\MyBuildMachine>exit 255
08:13:56 Build step 'Execute Windows batch command' marked build as failure
08:13:56 Email was triggered for: Failure - Any
08:13:56 Sending email for trigger: Failure - Any
08:13:56 Sending email to: [email protected]
08:13:58 Finished: FAILURE
Излишне говорить, что приложение не выполнило свою задачу. Пытаясь понять проблему, я обнаружил здесь C:\MyApp\MyApp.exe
, it shows the same error.
объяснение перенаправления стандартного вывода, и Дженкинс фактически делает это автоматически, что вызывает это исключение. И действительно, когда я запускаю его в cmd с перенаправлением stdout, т.е.
У меня нет доступа к исходному коду приложения. Я знаю, что это можно решить изнутри. Мой вопрос: есть ли какой-нибудь способ помешать Дженкинсу перенаправить стандартный вывод в файл или каким-то образом обернуть exec так, чтобы я мог его запустить? (конечно, запустить его от другого исполнителя и просто перехватить исключение не получится. Исключения не будет, но и приложение не запустится).