Исключение Jenkins, Вызванное Перенаправлением Стандартного Вывода С Использованием Windows Cmd

  • Автор темы Bdfgdlfqi
  • Обновлено
  • 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 так, чтобы я мог его запустить? (конечно, запустить его от другого исполнителя и просто перехватить исключение не получится. Исключения не будет, но и приложение не запустится).

Bdfgdlfqi


Рег
22 Dec, 2004

Тем
74

Постов
173

Баллов
563
  • 25, Oct 2024
  • #2

Я узнал, как это сделать без конвейера. Это связано только со сценарием командной строки:

 
 start /w "" C:\MyApp\MyApp.exe >> text.txt
 

Этот вызов является асинхронным (т. е. командная строка не будет ждать возврата MyApp.exe). Если вы хотите, чтобы он подождал, вы можете использовать флаг /w, например:

start "" C:\MyApp\MyApp.exe >> text.txt
 

QuappyMug43


Рег
25 Oct, 2024

Тем
68

Постов
195

Баллов
555
Похожие темы Дата
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно