2013-02-28 8 views
28

Ich versuche, kontinuierliche Integration mit Hudson und MSTest zu tun.Hudson unter Windows - Fehler: java.io.IOException: Kann Programm "sh" nicht ausführen

Wenn ich versuche, diesen Job ich folgende Fehlermeldung erhalten auszuführen:

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 

Meine Konfiguration sieht wie folgt aus:

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 

My Command Line sieht wie folgt aus:

"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 
+1

das Problem gefunden. Musste die Shell nach C \ windows \ system32 \ cmd spezifizieren.exe –

+1

Bitte beantworte deine eigene Frage, damit sie anderen in der Zukunft helfen kann und die Leute deine ganze Frage nicht lesen, nur um herauszufinden, dass sie bereits gelöst ist. – Jim

Antwort

62

Dies passiert, wenn Sie Ihren Windows-Befehl als "Shell ausführen" anstatt "Windows Batch-Komm und".

+5

Warum ist das nicht die akzeptierte Antwort? – quantum

25

Dies geschieht, weil Jenkins den Shell-Pfad nicht kennt.
In Jenkins Manage -> Configure System -> Shell, setzen Sie die Shell-Pfad als

C:\Windows\system32\cmd.exe

+0

sollte es nicht aus PATH herausfinden? – Yar

+0

Perfekt für mich gearbeitet, danke. –

6

In meinem Fall die bearbeitete Builds mit dem "Shell-Execute" vor dem Cannot run program "sh" nach einem Neustart des Systems und der Migration und gab zu tun. Das Problem war, dass der Systempfad unerwartet kürzer wurde. Es ist nicht klar, warum, aber der Pfad verloren C:\Program Files (x86)\Git\bin und die Version von Git, die ich verwendete, kommt mit .

Natürlich könnten Sie alle Ihre Build-Schritte "Execute shell" in allen Ihren Jobs auf "Windows Batch-Befehl ausführen" ändern, wie von @funkybro vorgeschlagen. Dies löst Ihr Problem nicht, wenn Sie einen Job haben, der entweder auf einem Windows-System oder Linux ausgeführt werden kann und Sie beide Systeme aus anderen Gründen haben.

Oder könnten Sie diese Einstellung ändern cmd.exe zu verwenden, wie von @ajith vorgeschlagen: Verwalten Jenkins -> Configure System -> Shell -> Shell ausführbar = C:\Windows\system32\cmd.exe

Aber, ich mag Linux-Befehle mit und Verwendung etwas, das Bash ähnlicher ist. Es ist meine eigene Vorliebe, aber ich dachte, das könnte auch hilfreich sein. Um von Anfang an zu beginnen, habe ich Chocolatey NuGet verwendet, um Git zu installieren. Ich empfehle auch GnuWin, Ihnen einige der sehr nützlichen Unix-Befehle zu geben.

Dann können Sie dieses Problem zu beheben, die Windows-Benutzeroberfläche unter Verwendung von C:\Program Files (x86)\Git\bin\ zum Systempfad hinzufügen.

Oder man kann es in Jenkins globalen Konfigurations beheben: Verwalten Jenkins -> Configure System -> Shell -> Shell ausführbar = C:\Program Files (x86)\Git\bin\sh.exe

+2

Dank @Nate. Ich hatte das gleiche Problem. Das Problem war, dass meine Git-Installation nur hinzugefügt \ Git \ cmd \ und nicht \ Git \ bin .. –

+2

Ich musste auch die Verbindung mit dem Knoten zurücksetzen, damit Jenkins den PATH neu laden. – Arthur

+2

Wenn ich die ausführbare Shell in der globalen Konfiguration von Jenkins spezifiziere, versucht sogar mein Linux- und OSX-Slave es zu benutzen, was dazu führt, dass beide fehlschlagen ?! Gibt es eine Möglichkeit, nur den ausführbaren Shell-Pfad für meinen Windows-Slave anzugeben? – Ben

1

Die Art und Weise, das Problem zu beheben, war der Wert von C:\Windows\system32\cmd.exe in die „Shell zu setzen ausführbare "Konfiguration in Hudson Systemkonfiguration.

In Build-Abschnitt Ihrer Arbeit können Sie Fenster gestellt Befehl nach dem Kompilieren des Projekts EX auszuführen:

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