web-dev-qa-db-ja.com

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

これは、Windowsコマンドを「Windowsバッチコマンドの実行」ではなく「シェルの実行」として指定した場合に発生します。

81
funkybro

これは、ジェンキンスがシェルパスを認識していないために発生します。
Jenkinsの管理->システムの構成->シェルで、シェルパスを次のように設定します。

C:\ Windows\system32\cmd.exe

34
ajith

私の場合、システムの再起動と移行を行う前に「シェルを実行」を使用してビルドが機能し、その後_Cannot run program "sh"_が表示されました。問題は、システムパスが予想外に短くなったことです。理由は明らかではありませんが、パスがC:\Program Files (x86)\Git\binを失い、使用していたGitのバージョンには_sh.exe_が付属しています。

もちろん、@ funkybroが示唆するように、すべてのジョブで「シェルを実行」ビルドステップをすべて「Windowsバッチコマンドを実行」に変更することもできます。 WindowsシステムまたはLinuxで実行できるジョブがあり、他の理由で両方のシステムがある場合、これは問題を解決しません。

または、この設定を変更して、@ ajithが提案する_cmd.exe_を使用することもできます。Jenkinsの管理->システムの構成->シェル->実行可能シェル= _C:\Windows\system32\cmd.exe_

しかし、私はLinuxコマンドを持ち、Bashにより近いものを使用するのが好きです。それは私自身の好みですが、これも役立つと思いました。最初から始めるには、 Chocolatey NuGet を使用してGitをインストールしました。また、GnuWinを使用して、非常に役立つUnixコマンドを提供することをお勧めします。

  • インストール Chocolatey NuGet
  • CMDまたはPowerShellの場合:_cinst gnuwin git_

次に、C:\Program Files (x86)\Git\bin\をシステムパスに追加することにより、Windows UIを使用してこれを修正できます。

または、Jenkinsのグローバル構成で修正できます。Jenkinsの管理->システムの構成->シェル->実行可能シェル= C:\Program Files (x86)\Git\bin\sh.exe

8
Nate

問題を解決する方法は、C:\Windows\system32\cmd.exeの値をHudson System構成の「Shell実行可能」構成に入れることでした。

ジョブのビルドセクションで、プロジェクトEXのコンパイル後に実行するwindowsコマンドを配置できます。

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