如何让Cygwin成为Jenkins的默认shell



我正试图为使用SCons编写的构建提出一些合理的解决方案,SCons依赖于相当多的应用程序以类unix的方式访问,使用类unix的路径等。然而,当我试图使用SCons插件,或Git插件在Jenkins,它试图调用插件使用像cmd /c git.exe -这肯定会失败,因为Git是使用Cygwin安装的,只在Cygwin shell中已知,而不是在CMD中。但是,即使我可以使git和其他文件对cmd.exe可用,也会出现其他问题:git的Cygwin版本期望路径具有正斜杠,并将反斜杠视为转义字符。愚蠢的Windows文件系统相关问题也出现了(我不能给Jenkins权限删除我自己的文件!)。

那么,有没有一种方法可以让Jenkins只使用Cygwin shell,而从不使用cmd.exe?或者我应该准备在VM中运行一些Linux来处理这个问题?

你可以配置Jenkins使用特定的shell命令来执行cygwin命令,如下所示:

c:cygwinbinmintty --hold always --exec /cygdrive/c/path/to/bash/script.sh

script.sh将执行Jenkins执行所需的所有命令

为了记录,这是我最后做的:

  1. 添加用户SYSTEM到Cygwin, mkpasswd -u SYSTEM
  2. 编辑/etc/passwd,将新创建的用户的主目录添加到记录中。现在它看起来像下面这样:

    系统:*:18:544:S-1-5-18:/home/系统:

  3. 复制我自己的用户配置设置,如.netrc, .ssh等到SYSTEM home。然后,从Windows资源管理器中,通过一系列弹出窗口,我已经将所有这些文件的所有权声明给SYSTEM用户。一个接一个!我爱微软!在Jenkins中,我现在运行一个包装器,通过调用c:cygwinbinbash --login -i /path/to/script/script

  4. 来设置一些其他环境变量等。
  5. 因为其他配置上的困难放弃了,让Jenkins服务在我的用户下而不是在SYSTEM下运行。这里有一篇关于如何做到这一点的博客文章:http://antagonisticpleiotropy.blogspot.co.il/2012/08/running-jenkins-in-windows-with-regular.html但是,基本上,你需要打开Windows服务,然后找到Jenkins服务,选择它的属性,转到"登录"选项卡,将用户更改为"此用户"。

一种方法是使用

开始"execute shell"构建步骤
#!c:cygwinbinbash --login
技巧当然是它会重置当前目录,所以你需要
cd `cygpath $WORKSPACE`

返回工作空间

添加到thon56的好答案:这是有用的:"set -ex"

#!c:cygwinbinbash --login 
cd `cygpath $WORKSPACE`
set -ex

细节:

  • -e退出错误。如果你想让你的作业在出错时失败,这一点很重要。
  • -x回显命令到屏幕,如果需要的话。

也可以使用#!C:cygwinbinbash——login -ex,但是这会返回很多你可能不想看到的登录步骤。

要在Jenkins窗口中运行sh,请遵循以下步骤:

  1. 在C盘安装Cygwin
  2. 去管理Jenkins>系统比;shell然后在这里提到Cygwin的路径,C:cygwin64bin
  3. 去管理Jenkins>可用插件>Cygpath安装并重启Jenkins
  4. 创建新作业/项目>构建steps>执行shell>使用shebang #!/bin/sh
  5. 开始编写shell

最新更新