2013-02-28 24 views
28

Tôi đang cố gắng thực hiện tích hợp liên tục với Hudson và MSTest.Hudson trên Windows - Lỗi: java.io.IOException: Không thể chạy chương trình "sh"

Khi tôi cố gắng chạy công việc này tôi nhận được lỗi sau:

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 

Cấu hình của tôi trông như thế này:

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 

Command Line của tôi trông như thế này:

"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

Tìm thấy các vấn đề. Đã phải chỉ định trình bao tới C \ windows \ system32 \ cmd.exe –

+1

Hãy trả lời câu hỏi của riêng bạn, vì vậy nó có thể giúp những người khác trong tương lai, và vì vậy mọi người không đọc toàn bộ câu hỏi của bạn chỉ để tìm ra câu hỏi đã được giải quyết. – Jim

Trả lời

62

Điều này xảy ra nếu bạn đã chỉ định lệnh Windows của bạn là "Execute shell" thay vì "Execute Windows batch comm và ".

+5

Tại sao đây không phải là câu trả lời được chấp nhận? – quantum

25

Điều này xảy ra vì Jenkins không biết về đường dẫn vỏ.
Trong Manage Jenkins -> System Configure -> Shell, thiết lập đường dẫn shell như

C:\Windows\system32\cmd.exe

+0

không nên tìm ra từ 'PATH'? – Yar

+0

Làm việc hoàn hảo cho tôi, cảm ơn. –

6

Trong trường hợp của tôi được xây dựng làm việc bằng cách sử dụng "Execute vỏ" trước khi thực hiện khởi động lại hệ thống và di cư và đưa các Cannot run program "sh" sau. Vấn đề là đường dẫn hệ thống đã rút ngắn đột ngột. Không rõ tại sao, nhưng đường dẫn bị mất C:\Program Files (x86)\Git\bin và phiên bản Git tôi đang sử dụng đi kèm với sh.exe.

Tất nhiên, bạn chỉ có thể thay đổi tất cả các bước xây dựng "Execute shell" thành "Execute Windows batch command" trong tất cả các công việc của bạn như được gợi ý bởi @funkybro. Điều này không giải quyết được vấn đề của bạn nếu bạn có một công việc có thể chạy trên hệ điều hành Windows hoặc Linux và bạn có cả hai hệ thống vì các lý do khác.

Hoặc, bạn có thể thay đổi cài đặt này để sử dụng cmd.exe theo đề nghị của @ajith: Quản lý Jenkins -> System Configure -> Shell -> Shell thực thi = C:\Windows\system32\cmd.exe

Nhưng, Tôi thích có lệnh Linux và sử dụng cái gì đó gần giống với Bash hơn. Đó là sở thích của riêng tôi nhưng tôi nghĩ điều này cũng có thể hữu ích. Để bắt đầu từ đầu, tôi đã sử dụng Chocolatey NuGet để cài đặt Git. Tôi cũng khuyên GnuWin cung cấp cho bạn một số lệnh Unix rất hữu ích.

Sau đó, bạn có thể khắc phục điều này bằng cách sử dụng giao diện người dùng của Windows bằng cách thêm C:\Program Files (x86)\Git\bin\ đến đường dẫn hệ thống.

Hoặc bạn có thể sửa chữa nó trong Jenkins cấu hình toàn cầu: Quản lý Jenkins -> System Configure -> Shell -> Shell thực thi = C:\Program Files (x86)\Git\bin\sh.exe

+2

Cảm ơn @Nate. Tôi gặp vấn đề tương tự. Vấn đề là cài đặt git của tôi chỉ thêm \ Git \ cmd \ và không \ Git \ bin .. –

+2

Tôi cũng đã phải thiết lập lại kết nối với nút để làm cho Jenkins tải lại PATH. – Arthur

+2

Nếu tôi chỉ định shell thực thi trên cấu hình toàn cầu của Jenkins, ngay cả nô lệ Linux và OSX của tôi cố gắng sử dụng nó, điều này dẫn đến cả hai đều thất bại ?! Có cách nào chỉ xác định đường dẫn shell thực thi cho nô lệ Windows của tôi? – Ben

1

Cách để sửa chữa vấn đề là đặt giá trị của C:\Windows\system32\cmd.exe vào "Shell thực thi "cấu hình trong cấu hình hệ thống Hudson.

Trong xây dựng phần công việc của bạn, bạn có thể đặt cửa sổ lệnh để thực hiện sau khi biên dịch EX dự án :

copy target\pmd-rules-extensions-0.0.1-SNAPSHOT.jar D:\projects\sonar\sonar-3.4.1\extensions\rules\pmd\ 
Các vấn đề liên quan