我有一个在Tomcat Windows服务上运行的git插件的Hudson(持续集成系统)。 msysgit已安装且msysgit bin目录位于路径中。安装了PuTTY / Pageant / plink,msysgit配置为使用它们。
当我运行尝试克隆git存储库的作业时,我收到以下错误:
$ git clone -o origin git@hostname:project.git "e:\HUDSON_HOME\jobs\Project Trunk\workspace"
ERROR: Error cloning remote repo 'origin' : Could not clone git@hostname:project.git
ERROR: Cause: Error performing git clone -o origin git@hostname:project.git e:\HUDSON_HOME\jobs\Project Trunk\workspace
Trying next repository
ERROR: Could not clone from a repository
FATAL: Could not clone
hudson.plugins.git.GitException: Could not clone
这让我相信问题在于拥有Tomcat / Hudson Windows服务(本地系统)的用户没有设置SSH密钥以能够克隆git存储库。
我的问题是,如何设置以便git plugin / msysgit在尝试克隆时知道使用特定的SSH密钥?我不认为Pageant会工作,因为Tomcat服务作为“本地系统”用户运行,但我可能错了。我尝试将Pageant设置为服务(使用runassvc.exe),传递相应的密钥,并将其作为“本地系统”运行。 Tomcat / Hudson服务似乎无法从分页服务中看到密钥。是否还有其他设置密钥的技巧?
感谢。
编辑:关于http://n4.nabble.com/Hudson-with-git-and-ssh-td375633.html的讨论表明其他人有类似的问题。建议使用ssh-agent,这个工具确实带有msysgit,但我不确定如何将它与Hudson服务结合使用。如果有人能填补空白,仍然是一个很好的线索。感谢Peter对链接的评论。
此外,关于http://n4.nabble.com/questions-about-git-and-github-plug-ins-td383420.html的讨论始于同一个问题。我正试图复活那个帖子。
答案 0 :(得分:7)
Windows的另一个重要注意事项(我想附加到这个答案,因为我很快发现了这个问题,但发现这个我需要的额外细节只需要几个小时的搜索):
Git希望将%HOME%环境变量设置为您的用户目录(IE C:\ Documents and Settings \ hudsonuser)...这就是它知道如何使用密钥文件查找.ssh目录!
我发现了这个here on server fault(但在那里没有足够的声誉来支持它)。
答案 1 :(得分:6)
我们使用Hudson,使用ssh密钥检查git中的源代码。但是,我们实际上在一个ubuntu服务器上有Hudson。 Hudson的ssh密钥对位于~hudson/id_rsa
和~hudson/id_rsa.pub
因此,根据我们的建议调整Windows设置:
我们团队中基于Windows的开发人员使用MSysGit并定期通过git over ssh检查代码 - 但不使用Putty / Pageant。由于登录时出现一些协议错误,我们发现Pageant很痛苦。相反,他们将git配置为使用openSSH(它是安装期间的选项之一)。然后他们的公钥/私钥对生活在~username/id_rsa
和~username/id_rsa.pub
中,一切正常。
所以,我建议更改你的git配置使用OpenSSH而不是选美。如果不出意外,你不必担心开始选美。
您可以使用PuttyGen生成密钥。但是,如果您使用的是OpenSSH而不是pageant,则需要导出合适的私钥(从PuttyGen顶部的其中一个菜单中)并将其保存为id_rsa
,然后复制并粘贴公共来自PuttyGen GUI的密钥(它显示但不会为OpenSSH保存合适的版本)并将其保存为id_rsa.pub
。这是因为Putty使用的格式与OpenSSH的格式略有不同。
或者,当然,您可以随时在ubuntu服务器(真实服务器或VirtualBox)上托管您的哈德森服务器
答案 2 :(得分:3)
我发现我必须使用不同的方法来使用 Ubuntu (使用Jenkins,而不是Hudson,不过它看起来基本上是同样的问题。我检查了%HOME%
环境变量通过 Jenkins GUI 看起来是正确的。
我想用来识别Github私有存储库的 Jenkins 的密钥已经存在。我将这些内容复制到/var/lib/jenkins/.ssh
- 该密钥和帐户的id_rsa
和id_rsa.pub
文件。
最初我将这些复制为“root
”并且 Jenkins 无法访问它们因此我仍然收到错误(令人困惑的是,错误要求我在没有错误时输入密码任何)。因此,我chown
,chmod
和chgrp
将这些设置为 Jenkins 。
我通过以Jenkins用户身份登录时执行git克隆来测试这个。
我知道这条路径是特定于Ubuntu的,但是类似的设置确保密钥文件在正确的位置可用,并且在命令行上进行测试git clone git:myrepo
,可能至少可以确定Windows的位置不同。
答案 3 :(得分:0)
将您的.ssh文件夹放在
下C:\ Windows \ SysWOW64 \ config \ systemprofile
或
C:\的Windows \ system32 \设置\ systemprofile
取决于您的系统是32还是64.
这是“本地系统”的“USER”目录。