【问题标题】:Jenkins can not clone Git repository over Git/SSH on WindowsJenkins 无法在 Windows 上通过 Git/SSH 克隆 Git 存储库
【发布时间】:2011-10-21 13:53:46
【问题描述】:

我已经在 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 and Git

【问题讨论】:

  • 您博客文章的链接不再有效;你可能想更新它:)
  • @OwenBlacker 感谢您告诉我,我已经修复了断开的链接。
  • 谢谢,伙计! (我似乎无法在我的回复中标记你;Stack Overflow 是否对 háček 有问题?)
  • @OwenBlacker:“只能通知一位其他用户;将始终通知帖子所有者”
  • 啊啊啊。谢谢你:)

标签: windows git continuous-integration hudson jenkins


【解决方案1】:

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

【讨论】:

  • 这个问题困扰了我一天。从 ...bin/git.exe 更改为 ...cmd/git.exe 就可以了。非常感谢! :)
【解决方案2】:

我最近经历了这些痛苦。尤其令人沮丧的是在这种情况下缺少错误日志:可能是因为 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. 对于调试,我发现创建没有 SCM 的测试作业很有用,但在“执行 shell/批处理”构建步骤中运行 git clone。这应该会揭示更多信息。顺便说一句,您可以在同一步骤中执行env,也许ls %HOME%/.ssh

我认为以上内容为我提供了一个支持 git 的 Windows 7 64 位 Jenkins 从站——尽管我认为这与其他一些精细的配置细节有关,而不是 64 位和 32 位。祝你好运!

【讨论】:

  • 谢谢,会尝试你的建议,当我解决问题时我会更新我的问题。
  • 将 git 设置为 <MSYSGIT_ROOT>\cmd\git.cmd 而不是 <MSYSGIT_ROOT>\bin\git.exe 解决了这个问题。
  • 很好,感谢您的反馈。 (顺便说一句,由于某些奇怪的原因 git.exe 对我来说工作得很好:-/
  • 也许这不是问题所在。我已经在两台机器上卸载了 Jenkins 和 Git 并安装干净。也许这次我做了一些不同的事情。
  • 是的,在 64 位机器上。我认为 Git.exe 不使用我的 ssh 密钥,而 git.cmd 使用。我可能可以让 git.exe 来设置 HOME 和类似的东西,但我没有时间尝试。
【解决方案3】:

我遇到的另一个问题是,ssh.exe 没有在 %userprofile%/.ssh 文件夹中查找密钥文件。相反,它正在查看文件夹C:\Program Files (x86)\Git\.ssh,该文件夹为空,并且由于 git repo 所在机器上的 ssh 身份验证提示而导致挂起。

我们刚刚将%userprofile%/.ssh下的key文件复制到C:\Program Files (x86)\Git\.ssh,问题就解决了。

【讨论】:

  • 我无法让 Jenkins 凭据工作,在 Git\.ssh 中弹出文件(并说凭据:-none-)效果很好。
【解决方案4】:

来自一个艰苦的教训的笔记。 我无法让 ssh 作为 ssh+git 的命名用户帐户运行 Jenkins。

为了解决这个问题,我必须这样做:

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

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

【讨论】:

    【解决方案5】:

    当您必须使用每个用户配置文件中的任何配置选项时,例如。 ~/.ssh/config 可以放在C:\Program Files (x86)\Git\etc\ssh\ssh_config,关键文件可以放在C:\Program Files (x86)\Git.ssh

    【讨论】:

      【解决方案6】:

      如果您的帐户已附加到域。然后你需要确定运行 Jenkins Slave 的用户。为此,打开“Jenkins Slave”的设置->属性 ->登录。并从中选择必要的用户以正确执行。

      【讨论】:

        【解决方案7】:

        由于我的 Windows Jenkins 是从属设备,我需要配置该节点以在 cmd 中找到 git,而不是像 inger 所描述的那样在 bin 中查找。为此,请转到 Manage Jenkins,Manage Nodes,单击相应的节点,单击 Configure,然后转到 Tool Locations。在下拉菜单中找到 git,然后指定 git.exe(包括 git.exe)的路径,如 C:\Program Files\Git\cmd\git.exe。

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

        【讨论】:

          【解决方案8】:

          https://wiki.jenkins-ci.org/display/JENKINS/GitHub+Plugin

          只需将启用 ssh 的用户登录添加到 Jenkins,它应该可以顺利运行。

          【讨论】:

          • 始终欢迎提供潜在解决方案的链接,但如果链接不再可用,请为未来的访问者添加一些详细信息。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-19
          • 2013-04-19
          • 2017-09-09
          • 1970-01-01
          • 2012-02-28
          相关资源
          最近更新 更多