我正试图为使用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执行所需的所有命令
为了记录,这是我最后做的:
- 添加用户
SYSTEM
到Cygwin,mkpasswd -u SYSTEM
-
编辑
/etc/passwd
,将新创建的用户的主目录添加到记录中。现在它看起来像下面这样:系统:*:18:544:S-1-5-18:/home/系统:
-
复制我自己的用户配置设置,如
.netrc
,.ssh
等到SYSTEM
home。然后,从Windows资源管理器中,通过一系列弹出窗口,我已经将所有这些文件的所有权声明给SYSTEM
用户。一个接一个!我爱微软!在Jenkins中,我现在运行一个包装器,通过调用c:cygwinbinbash --login -i /path/to/script/script
来设置一些其他环境变量等。 因为其他配置上的困难放弃了,让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,请遵循以下步骤:
- 在C盘安装Cygwin
- 去管理Jenkins>系统比;shell然后在这里提到Cygwin的路径,
C:cygwin64bin
- 去管理Jenkins>可用插件>Cygpath安装并重启Jenkins
- 创建新作业/项目>构建steps>执行shell>使用shebang
#!/bin/sh
开始编写shell