web-dev-qa-db-fra.com

Hudson sous Windows - Erreur: Java.io.IOException: impossible d'exécuter le programme "sh"

J'essaie de faire une intégration continue avec Hudson et MSTest.

Lorsque j'essaie d'exécuter ce travail, j'obtiens l'erreur suivante:

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

Ma configuration ressemble à ceci:

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

Ma ligne de commande ressemble à ceci:

"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
35
Markus_DE_HH

Cela se produit si vous avez spécifié votre commande Windows comme "Exécuter le shell" plutôt que "Exécuter la commande batch Windows".

81
funkybro

Cela se produit car Jenkins n'est pas au courant du chemin Shell.
Dans Gérer Jenkins -> Configurer le système -> Shell, définissez le chemin du Shell comme

C:\Windows\system32\cmd.exe

34
ajith

Dans mon cas, les builds fonctionnaient en utilisant "Execute Shell" avant de faire un redémarrage et une migration du système et donnaient le Cannot run program "sh" Après. Le problème est que le chemin d'accès au système s'est raccourci de manière inattendue. On ne sait pas pourquoi, mais le chemin a perdu C:\Program Files (x86)\Git\bin et la version de Git que j'utilisais est livrée avec sh.exe.

Bien sûr, vous pouvez simplement changer toutes vos étapes de construction "Execute Shell" en "Execute Windows batch command" dans toutes vos tâches, comme suggéré par @funkybro. Cela ne résout pas votre problème si vous avez un travail qui pourrait s'exécuter sur un système Windows ou Linux et que vous avez les deux systèmes pour d'autres raisons.

Ou, vous pouvez modifier ce paramètre pour utiliser cmd.exe Comme suggéré par @ajith: Gérer Jenkins -> Configurer le système -> Shell -> Exécutable Shell = C:\Windows\system32\cmd.exe

Mais , j'aime avoir des commandes linux et utiliser quelque chose qui ressemble plus à Bash. C'est ma préférence, mais j'ai pensé que cela pourrait aussi être utile. Pour commencer depuis le début, j'ai utilisé Chocolatey NuGet pour installer Git. Je recommande également à GnuWin de vous donner certaines des commandes Unix très utiles.

Vous pouvez ensuite résoudre ce problème à l'aide de l'interface utilisateur de Windows en ajoutant C:\Program Files (x86)\Git\bin\ au chemin d'accès système.

Ou vous pouvez le corriger dans la configuration globale de Jenkins: Gérer Jenkins -> Configurer le système -> Shell -> Shell exécutable = C:\Program Files (x86)\Git\bin\sh.exe

8
Nate

La façon de résoudre le problème était de mettre la valeur de C:\Windows\system32\cmd.exe dans la configuration "Shell exécutable" dans la configuration du système Hudson.

Dans la section de construction de votre travail, vous pouvez mettre la commande windows à exécuter après avoir compilé le projet EX:

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