Jenkins无法在Windows上通过Git/SSH克隆Git仓库

20

我已经成功在 Windows 2008 32 位系统上使用 Git/SSH 在 Jenkins 中克隆了 Git 存储库。但当我尝试在 Windows 2008 64 位系统上进行同样的操作时,控制台输出页面卡在这里:

Démarré par l'utilisateur anonymous
Checkout:book / C:\Jenkins\workspace\book - hudson.remoting.LocalChannel@1da691a
Using strategy: Default
Last Built Revision: Revision 5d7ce4ae23c91fb201ee005e6db17bcd795ca965 (origin/HEAD, origin/master)
Checkout:book / C:\Jenkins\workspace\book - hudson.remoting.LocalChannel@1da691a
Cloning the remote Git repository
Cloning repository origin

当我中止构建(在被卡住的几分钟后),我得到了剩余的错误消息:

ERROR: Error cloning remote repo 'origin' : Could not clone git@github.com:zeljkofilipin/watirbook.git
ERROR: Cause: Error performing command: C:\Git\bin\git.exe clone --progress -o origin git@github.com:zeljkofilipin/watirbook.git C:\Jenkins\workspace\book
null
Trying next repository
ERROR: Could not clone repository
FATAL: Could not clone
hudson.plugins.git.GitException: Could not clone
    at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:1042)
    at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:968)
    at hudson.FilePath.act(FilePath.java:785)
    at hudson.FilePath.act(FilePath.java:767)
    at hudson.plugins.git.GitSCM.checkout(GitSCM.java:968)
    at hudson.model.AbstractProject.checkout(AbstractProject.java:1193)
    at hudson.model.AbstractBuild$AbstractRunner.checkout(AbstractBuild.java:567)
    at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:455)
    at hudson.model.Run.run(Run.java:1404)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
    at hudson.model.ResourceController.execute(ResourceController.java:88)
    at hudson.model.Executor.run(Executor.java:230)
  • 我可以从两台机器上的Jenkins通过Git只读URL git://github.com/zeljkofilipin/watirbook.git克隆存储库。
  • 我可以通过命令行从两台计算机上的Git / SSH URL git@github.com:zeljkofilipin/watirbook.git进行克隆。
  • 我可以通过32位机器上Jenkins的Git / SSH URL进行克隆,但无法在64位机器上进行克隆。

我能注意到两台机器之间唯一的区别(不计算一台是我笔记本电脑上的虚拟机,而另一台是瑞士的真实机器)是第一台是32位机器,第二台是64位机器。

不确定是否相关,但32位机器的位置设置为克罗地亚,而64位机器的位置设置为瑞士(如您从法语的Git输出中所见)。

有关更多信息,请参阅我的博客文章:Jenkins,Windows和Git


你的博客文章链接已经失效了,你可能需要更新一下 :) - Owen Blacker
1
@OwenBlacker 谢谢您告诉我,我已经修复了损坏的链接。 - Željko Filipin
谢谢,老兄!(我的回复似乎无法标记你;Stack Overflow有 háček 的问题吗?) - Owen Blacker
@OwenBlacker:“只能通知一个额外的用户;帖子所有者将始终收到通知。” - Željko Filipin
啊啊啊。谢谢 :) - Owen Blacker
8个回答

27

我最近也经历了这些痛苦。特别令人沮丧的是,在这种情况下缺乏错误日志,可能是因为MSysgit在尝试恢复时提示用户在控制台上操作,而Jenkins控制台无法接收。

根据我的经验,以下是一些需要注意的关键要素:

  1. 同时安装Msysgit和Cygwin:对我来说,MSysgit效果更好-但我想你也在使用它
  2. 有些人用<MSYSGIT_ROOT>\cmd\git.cmd<MSYSGIT_ROOT>\bin\git.exe更好运行
  3. 确保您的从服务器以相同的用户身份运行(这不是基于服务的安装的默认设置)..-哦,我看到您也搞定了这个
  4. 显式为Windows从服务器设置HOME变量
  5. 基本上,确保在Jenkins下访问相同的.ssh密钥
  6. 为了调试,我发现创建一个没有源代码管理的测试任务非常有用,但在“执行 shell/batch”构建步骤中运行git clone。那应该会显示更多信息。顺便说一句,在同一步骤中,您可以运行env,也可以运行ls %HOME%/.ssh

我认为以上这些因素让我拥有了一个具备Git支持的Windows 7 64位Jenkins从服务器,虽然我认为这更多地与其他细节配置有关,而不是与64位和32位有关。无论如何,祝你好运!


3
将 git 设置为 <MSYSGIT_ROOT>\cmd\git.cmd 而不是 <MSYSGIT_ROOT>\bin\git.exe 解决了这个问题。 - Željko Filipin
使用Git/SSH进行克隆在我的git.exe上是可以正常工作的,所以这可能不是普遍的真相...这个问题在64位系统上仍然存在吗? - inger
1
是的,在64位机器上。我认为Git.exe没有使用我的ssh密钥,而git.cmd则有。我可能可以通过设置HOME等来让git.exe工作,但我没有时间尝试它。 - Željko Filipin
@ŽeljkoFilipin 在我的设置中遇到了类似的问题,确实在用户环境中设置 HOME 解决了这个问题。 - Yonatan
@ŽeljkoFilipin:你尝试通过cygwin完成所有这些操作了吗?我正在通过cygwin设置所有内容,因此我将jenkins设置为使用该从机作为Unix从机。一切都很顺利,除了git克隆只是旋转,直到我杀死它(从jenkins控制台)。通过cygwin终端手动执行它可以正常工作。我无法弄清楚区别所在。 - Jordan
显示剩余7条评论

7
在最新的git版本中,必须使用%GIT_HOME%/cmd/git.exe而不是%GIT_HOME%/bin/git.exe,并找出运行jenkins服务的用户的主目录。

这个问题困扰了我一整天。将...bin/git.exe更改为...cmd/git.exe就解决了问题。非常感谢! :) - Technext

3

我遇到的另一个问题是,ssh.exe没有查看%userprofile%/.ssh文件夹中的密钥文件。相反,它正在查看空文件夹C:\Program Files (x86)\Git\.ssh,这会导致在托管git仓库的计算机上出现ssh身份验证提示而卡死。

我们只需将密钥文件从%userprofile%/.ssh复制到C:\Program Files (x86)\Git\.ssh即可解决问题。


我无法让Jenkins凭据正常工作,将文件放入Git.ssh(并说凭据:-none-)非常有效。 - Ian Grainger

2

一次艰难的教训笔记。

我在使用命名用户帐户进行ssh+git运行Jenkins时遇到了问题。

以下是我解决问题所必须要做的:

  1. 使用ssh-keygen生成密钥(请注意它们所在的位置)
  2. 将“HOME”设置为此位置

我尝试使用puttygen和GET_SSH=plink,但都失败了,而且没有明显的错误。


0
如果您的帐户与域名相关联,则需要确保Jenkins Slave运行的用户。为此,请打开“设置”->“属性”,选择“Jenkins Slave”的登录,并从域中选择必要的用户 以进行正确执行。

0

如果你需要使用来自每个用户配置文件的任何配置选项,例如 ~/.ssh/config,你可以将它们放在 C:\Program Files (x86)\Git\etc\ssh\ssh_config 中,密钥文件可以放在 C:\Program Files (x86)\Git.ssh 中。


0

欢迎提供潜在解决方案的链接,但请添加一些细节以备将来访问者参考,以防链接不再可用。 - Nikolay Mihaylov

0

由于我的Windows Jenkins是一个从属节点,我需要配置该节点以在cmd中查找git而不是像inger所描述的bin。要做到这一点,请转到“管理Jenkins”,“管理节点”,单击适当的节点,单击“配置”,然后转到“工具位置”。在下拉菜单中找到git,然后指定到git.exe的路径(包括git.exe),例如C:\ Program Files \ Git \ cmd \ git.exe。

我确认cmd / git.exe与bin / git.exe在命令行和使用git命令(而不是scm存储库)的临时jenkins作业中的工作方式不同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接