5

我正在尝试为使用 SCons 编写的构建提出一些明智的解决方案,它依赖于相当多的应用程序以类似 Unix 的方式访问,使用类似 Unix 的路径等。但是,当我尝试要在 Jenkins 中使用 SCons 插件或 Git 插件,它会尝试使用类似的东西调用插件cmd /c git.exe- 这肯定会失败,因为 Git 是使用 Cygwin 安装的,并且仅在 Cygwin shell 中知道,但在 CMD 中不知道。但是,即使我可以让 git 和其余部分对 cmd.exe 可用,也会出现其他问题:Git 的 Cygwin 版本希望路径具有正斜杠并将反斜杠视为转义字符。愚蠢的 Windows 文件系统相关问题也会出现(我不能授予 Jenkins 删除我自己的文件的权限!)。

那么,有没有办法让 Jenkins 只使用 Cygwin shell,而不使用 cmd.exe?或者我应该准备在虚拟机中运行一些 Linux 来处理这个问题吗?

4

4 回答 4

2

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

c:\cygwin\bin\mintty --hold always --exec /cygdrive/c/path/to/bash/script.sh

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

于 2013-06-21T10:23:14.443 回答
1

只是为了记录,这就是我最终做的事情:

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

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

  3. 将我自己用户的配置设置,如.netrc.ssh等复制SYSTEM到家中。然后,从 Windows 资源管理器中,通过一系列弹出窗口,我向SYSTEM用户声明了所有这些文件的所有权。逐个!我爱微软!在 Jenkins 中,我现在为我的构建运行一个包装器,通过调用设置一些其他环境变量等c:\cygwin\bin\bash --login -i /path/to/script/script

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

于 2013-06-30T07:37:36.277 回答
1

一种方法是开始你的“执行外壳”构建步骤

#!c:\cygwin\bin\bash --login

诀窍当然是它会重置您的当前目录,因此您需要

cd `cygpath $WORKSPACE`

回到工作区。

于 2015-11-29T15:05:32.203 回答
0

添加到 thon56 的好答案:这很有帮助:“set -ex”

#!c:\cygwin\bin\bash --login 
cd `cygpath $WORKSPACE`
set -ex

细节:

  • -e 出错时退出。如果您希望您的工作因错误而失败,这一点很重要。
  • -x 如果需要,将命令回显到屏幕上。

您也可以使用#!c:\cygwin\bin\bash --login -ex,但这会呼应很多您很可能不想看到的登录步骤。

于 2017-03-02T18:01:20.710 回答