在Jenkins中更改Windows shell(从Cygwin更改为Git Bash/msys)

gib*_*gib 10 windows bash cygwin msysgit jenkins

我有一个Windows 7和一个Windows Server 2012奴隶,Jenkins代理和Cygwin已经设置好了.我想避免Cygwin,只使用Git for Windows附带的Git Bash shell(我认为它叫做msysgit).所以我重命名C:\cygwin64C:\cygwin64.bak,C:\cygwin64\bin从路径中删除,然后重新启动.

Windows 2012框现在运行正常,(Unix)shell脚本运行$OSTYPE = msys,和uname = MSYS_NT-6.3(表明Git Bash shell正在运行).

Windows 7框不会运行任何内容,并给出以下错误:

远程构建在工作区C:\ Users\Jenkins\workspace\TEST
[win7] $ sh -xe C:\ Users\jenkins\AppData\Local\Temp\hudson5047939025129374618.sh
系统找不到指定的文件
FATAL:命令执行
java.io.IOException 失败:无法运行程序"sh"(在目录"C:\ Users\Jenkins\workspace\TEST"中):CreateProcess
error = 2,系统找不到指定的文件.
       在java.lang.ProcessBuilder.start(ProcessBuilder.java:1041)

所以我的问题是,如何配置Jenkins使用C:\Program Files\Git\bin\sh.exeC:\Program Files\Git\usr\bin\bash.exe运行shell脚本?

gib*_*gib 21

我已经解决了.Jenkins将只选择路径中的第一个sh.exe.Git Bash有一个exe C:\Program Files\Git\usr\bin,所以如果你把它添加到路径的开头,它将被Jenkins选中.

在进行此更改后,您必须重新启动与Jenkins的从属连接,否则路径将不会传播.如果您正在使用Java Web Start,只需关闭Java窗口并重新启动它.

  • 当使用sh作为Pipeline构建的一部分时,Jenkins需要`nohup`(参见[JENKINS-33708](https://issues.jenkins-ci.org/browse/JENKINS-33708))所以我不得不使用`C:\ Program PATH中的Files\Git\usr\bin`以便它可以工作,因为`nohup.exe`就在那里. (4认同)

apa*_*a64 7

如果您只有Windows代理,并且所有将Git for Windows安装到同一位置,则可以为Jenkins系统配置中的所有代理设置shell可执行文件.

转到Manage Jenkins > Configure System,向下滚动到Shell并将Shell可执行文件设置为指向要使用Execute shell构建步骤启动的任何shell .

下面是如何设置使用Git for Windows安装的shell的示例:

Jenkins shell配置

注意:如果您混合使用Windows和非Windows代理(JENKINS-38211),则无法使用此功能.如果您将Windows代理sh.exe程序安装到不同位置(例如使用这些平台的默认安装位置的32位和64位Windows混合),则会导致类似问题.仅当您的环境仅包含配置相同的Windows节点时才使用此选项.


TAR*_*RJU 6

安装 git-bash

确保 Git\bin 文件夹(即:C:\Program Files\Git\bin)位于全局搜索路径中,以便 Jenkins 找到 sh.exe

要更新 Windows 中的路径,请使用以下命令

setx 路径“%path%;C:\Program Files\Git\bin”

或者看看这里https://www.windows-commandline.com/set-path-command-line/

使 nohup 可用于 Jenkins

  • mklink "C:\Program Files\Git\bin\nohup.exe" "C:\Program Files\git\usr\bin\nohup.exe"

  • mklink“C:\ Program Files \ Git \ bin \ msys-2.0.dll”“C:\ Program Files \ git \ usr \ bin \ msys-2.0.dll”

  • mklink“C:\ Program Files \ Git \ bin \ msys-iconv-2.dll”“C:\ Program Files \ git \ usr \ bin \ msys-iconv-2.dll”

  • mklink“C:\ Program Files \ Git \ bin \ msys-intl-8.dll”“C:\ Program Files \ git \ usr \ bin \ msys-intl-8.dll”

现在就可以运行 shell 命令了

玩得开心

  • 这个答案比下一个更好,因为它允许在 Jenkinsfile 中运行 Windows 批处理和 Unix shell 脚本。 (2认同)