Подтвердить что ты не робот

Hudson on Windows - Ошибка: java.io.IOException: не удается запустить программу "sh"

Я пытаюсь сделать непрерывную интеграцию с Hudson и MSTest.

Когда я пытаюсь запустить это задание, я получаю следующую ошибку:

1 Warnung(en)
    0 Fehler

Verstrichene Zeit 00:00:00.13
[workspace] $ sh -xe C:\Windows\TEMP\hudson4419897732634199534.sh
The system cannot find the file specified
FATAL: Befehlsausführung fehlgeschlagen
java.io.IOException: Cannot run program "sh" (in directory "C:\Users\Markus\.hudson\jobs\Test1 Unit TEst\workspace"): CreateProcess error=2, Das System kann die angegebene Datei nicht finden
    at java.lang.ProcessBuilder.start(Unknown Source)
    at hudson.Proc$LocalProc.<init>(Proc.java:187)
    at hudson.Proc$LocalProc.<init>(Proc.java:157)
    at hudson.Launcher$LocalLauncher.launch(Launcher.java:649)
    at hudson.Launcher$ProcStarter.start(Launcher.java:266)
    at hudson.Launcher$ProcStarter.join(Launcher.java:273)
    at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:79)
    at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:54)
    at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:34)
    at hudson.model.AbstractBuild$AbstractRunner.perform(AbstractBuild.java:646)
    at hudson.model.Build$RunnerImpl.build(Build.java:181)
    at hudson.model.Build$RunnerImpl.doRun(Build.java:136)
    at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:434)
    at hudson.model.Run.run(Run.java:1390)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:40)
    at hudson.model.ResourceController.execute(ResourceController.java:81)
    at hudson.model.Executor.run(Executor.java:137)
Caused by: java.io.IOException: CreateProcess error=2, Das System kann die angegebene Datei nicht finden
    at java.lang.ProcessImpl.create(Native Method)
    at java.lang.ProcessImpl.<init>(Unknown Source)
    at java.lang.ProcessImpl.start(Unknown Source)
    ... 17 more
Processing tests results in file results.trx
FATAL: No MSTest TRX test report files were found. Configuration error?
[DEBUG] Skipping watched dependency update for build: Test1 Unit TEst #5 due to result: FAILURE
Finished: FAILURE

Моя конфигурация выглядит следующим образом:

Buildverfahren
Build a Visual Studio project or solution using MSBuild
    MSBuild Version MS Build .NET 4 
    MSBuild Build File  trunk\UnitTestWithNHibernate\UnitTestWithNHibernate.sln 
    Command Line Arguments  /p:Configuration=Release

Моя командная строка выглядит так:

"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe"
/runconfig: trunk\UnitTestWithNHibernate\UnitTest\LocalTestRun.testrunconfig  /testcontainer: trunk\UnitTestWithNHibernate\UnitTest\bin\Debug\UnitTest.dll /resultsfile:results.trx
4b9b3361

Ответ 1

Это происходит, если вы указали свою команду Windows как "Execute shell", а не "Execute Windows batch command".

Ответ 2

Это происходит потому, что Дженкинс не знает о пути оболочки.
В разделе Управление Jenkins → Configure System → Shell установите путь оболочки как

C:\Windows\system32\cmd.exe

Ответ 3

В моем случае сборки работали с использованием "Execute shell" перед выполнением перезагрузки и миграции системы и после этого Cannot run program "sh". Проблема заключалась в том, что системный путь стал короче неожиданно. Непонятно, почему, но путь потерял C:\Program Files (x86)\Git\bin, а версия Git, которую я использовал, поставляется с sh.exe.

Конечно, вы можете просто изменить все шаги сборки "Execute shell" на "Выполнение командных команд Windows" на всех ваших работах, как это было предложено @funkybro. Это не решит вашу проблему, если у вас есть работа, которая может работать как в системе Windows, так и в Linux, и у вас есть обе системы по другим причинам.

Или вы можете изменить этот параметр, чтобы использовать cmd.exe, как предложено @ajith: Управление Jenkins → Настройка системы → Shell → Shell executable = C:\Windows\system32\cmd.exe

Но мне нравится иметь команды linux и использовать что-то более близкое к Bash. Это мое предпочтение, но я подумал, что это также может быть полезно. Чтобы начать с самого начала, я использовал Chocolatey NuGet для установки Git. Я также рекомендую GnuWin дать вам некоторые из очень полезных команд Unix.

  • Установить Chocolatey NuGet
  • В CMD или PowerShell: cinst gnuwin git

Затем вы можете исправить это с помощью пользовательского интерфейса Windows, добавив C:\Program Files (x86)\Git\bin\ к системному пути.

Или вы можете исправить это в глобальной конфигурации Jenkins: Управление Jenkins → Configure System → Shell → Shell executable = C:\Program Files (x86)\Git\bin\sh.exe

Ответ 4

Способ устранения проблемы состоял в том, чтобы поместить значение C:\Windows\system32\cmd.exe в конфигурацию "Shell executable" в конфигурации системы Hudson.

В разделе сборки вашей работы вы можете выполнить команду windows после компиляции проекта EX:

copy target\pmd-rules-extensions-0.0.1-SNAPSHOT.jar D:\projects\sonar\sonar-3.4.1\extensions\rules\pmd\

Ответ 5

Нашел проблему. Если бы указать оболочку на C\windows\system32\cmd.exe