2016-01-27 45 views
4

我有一個Windows 7和一個Windows Server 2012從站,Jenkins代理和Cygwin已經設置好了。我想避免Cygwin,只使用Git for Windows附帶的Git Bash shell(我認爲它叫做msysgit)。於是我將C:\cygwin64更名爲C:\cygwin64.bak,從路徑中刪除C:\cygwin64\bin,並重新啓動。 (Unix)shell腳本運行,$OSTYPE = msysuname = MSYS_NT-6.3(表示Git Bash shell正在運行)。Windows 2012框現在工作正常,(Unix)shell腳本運行,$OSTYPE = msysuname = MSYS_NT-6.3(指示Git Bash shell正在運行)。更改Jenkins中的Windows Shell(從Cygwin到Git Bash/msys)

Windows 7的框將不會運行任何東西,並提供了以下錯誤:

Building remotely on win7 in workspace C:\Users\Jenkins\workspace\TEST
[win7] $ sh -xe C:\Users\jenkins\AppData\Local\Temp\hudson5047939025129374618.sh
The system cannot find the file specified
FATAL: command execution failed
java.io.IOException: Cannot run program "sh" (in directory "C:\Users\Jenkins\workspace\TEST"): CreateProcess
error=2, The system cannot find the file specified.
       at java.lang.ProcessBuilder.start(ProcessBuilder.java:1041)

所以我的問題是,我該如何配置詹金斯使用C:\Program Files\Git\bin\sh.exe,或者C:\Program Files\Git\usr\bin\bash.exe運行shell腳本?

回答

11

我已經完成了。詹金斯將簡單地選擇路徑中的第一個sh.exe。 Git Bash在C:\Program Files\Git\usr\bin上有一個exe文件,所以如果你將它添加到你的路徑的開頭,它將被Jenkins選中。

進行此更改後,您必須重新啓動與Jenkins的從屬連接,否則路徑不會傳播。如果您正在使用Java Web Start,請關閉Java窗口並重新啓動它。

+0

'C:\ Program Files \ Git \ bin'也有一個sh.exe。任何理由不使用它? – BitwiseMan

+0

@BitwiseMan不知道。這是一個符號鏈接嗎? – gib

+0

Windows上的符號鏈接?對此感到懷疑。 :)無論哪種方式,我只是想知道你是否用較短的路徑嘗試過它。 – BitwiseMan

0

如果您只有Windows代理,並且它們都將Git for Windows安裝到同一位置,則可以在Jenkins系統配置中爲所有代理設置shell可執行文件。

轉到管理詹金斯>配置系統,向下滾動到殼牌並設置殼牌可執行指向你要開始與執行shell生成步驟無論外殼。

下面是一個例子如何設置安裝了使用Git爲Windows外殼程序:

Jenkins shell configuration

注:這不會,如果你有Windows和非Windows劑的混合物工作(JENKINS-38211 )。如果您有Windows代理程序,其中sh.exe安裝到不同位置(例如,使用這些平臺的默認安裝位置的32位和64位Windows混合),它將導致類似的問題。僅當您的環境僅包含相同配置的Windows節點時才使用它。

+0

謝謝你,這真的很有趣。你知道這個設置適用於什麼嗎?這是主機上的全局設置,所以我不清楚它是否適用於主設備或所有的從設備。 – gib

+0

全局設置似乎也適用於所有的奴隸@gibfahn。我有三個奴隸,我在他們的所有人(和主人)上安裝了Git for Windows,並將** Shell可執行文件**設置爲指向'sh.exe'。現在,我可以使用_Execute shell_構建步驟在所有從屬設備上運行作業。 – apa64

+0

因此,如果你運行一個jenkins作業來回應機器上的默認窗口路徑,它不包括'C:\ Program Files \ Git \ bin'? – gib