Windows上的Hudson - 错误:java.io.IOException:无法运行程序"sh"

Mar*_*_HH 35 windows continuous-integration hudson jenkins

我正在尝试与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
Run Code Online (Sandbox Code Playgroud)

我的配置如下所示:

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
Run Code Online (Sandbox Code Playgroud)

我的命令行看起来像这样:

"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
Run Code Online (Sandbox Code Playgroud)

fun*_*bro 81

如果您已将Windows命令指定为"执行shell"而不是"执行Windows批处理命令",则会发生这种情况.

  • 为什么这不是公认的答案? (5认同)

小智 34

这是因为Jenkins不了解shell路径.
在Manage Jenkins - > Configure System - > Shell中,将shell路径设置为

C:\ WINDOWS\SYSTEM32\CMD.EXE


Nat*_*ate 8

在我的情况下,在进行系统重启和迁移之前,构建使用"执行shell"工作,并给出了Cannot run program "sh"后续.问题是系统路径意外地缩短了.目前尚不清楚为什么,但失去的路径C:\Program Files (x86)\Git\bin和我正在使用的Git版本随之而来sh.exe.

当然,您可以按照@funkybro的建议,在所有作业中将所有"执行shell"构建步骤更改为"执行Windows批处理命令".如果您的作业可以在Windows系统或Linux上运行,并且由于其他原因同时拥有这两个系统,则这不能解决您的问题.

或者,您可以cmd.exe按照@ajith的建议更改此设置:管理Jenkins - >配置系统 - > Shell - > Shell executable =C:\Windows\system32\cmd.exe

但是,我喜欢使用linux命令并使用更接近Bash的东西.这是我自己的偏好,但我认为这也可能有所帮助.从头开始,我使用Chocolatey NuGet来安装Git.我还建议GnuWin为您提供一些非常有用的Unix命令.

然后,您可以通过添加C:\Program Files (x86)\Git\bin\到系统路径使用Windows UI来解决此问题.

或者您可以在Jenkins全局配置中修复它:管理Jenkins - >配置系统 - > Shell - > Shell executable = C:\Program Files (x86)\Git\bin\sh.exe

  • 谢谢@Nate.我遇到过同样的问题.问题是我的git安装只添加了\ Git\cmd \而不是\ Git\bin .. (2认同)
  • 我还必须重置与节点的连接,以使Jenkins重新加载PATH. (2认同)
  • 如果我在全局Jenkins的配置上指定shell可执行文件,甚至我的Linux和OSX slave也会尝试使用它,这会导致它们都失败了?!有没有办法只为我的Windows奴隶指定shell可执行路径? (2认同)