我有 Hudson(持续集成系统)和在 Tomcat Windows 服务上运行的 git 插件。msysgit 已安装并且 msysgit bin 目录位于路径中。PuTTY/Pageant/plink 已安装,并且 msysgit 已配置为使用它们。
我认为,我遇到的问题是拥有 Tomcat/Hudson 服务(本地系统)的用户没有设置 SSH 密钥来克隆 git 存储库。当 git Hudson 插件尝试克隆时,它会给出错误:
$ 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
我的问题是,如何设置以便 git 插件/msysgit 在尝试克隆时知道使用特定的 SSH 私钥?我认为 Pageant 不会起作用,因为 Tomcat 服务以“本地系统”用户身份运行,但我可能错了。
编辑:
我尝试将 Pageant 设置为服务(使用 runassvc.exe),传递适当的密钥,并让它作为“本地系统”运行。其他服务似乎无法从选美服务中看到密钥。
您绝对应该能够在非系统用户下运行它。选择/创建一个用户来运行 Hudson,然后尝试使用 ssh user@host 连接到服务器。如果它要求输入密码,则显然找不到您的密钥。
在这种情况下,请仔细检查密钥是否已加载到 pageant(每次启动时都需要让 pageant 从磁盘加载相关密钥),以及是否设置了 GIT_SSH 环境变量。
您可以执行此操作的另一种方法是将 GIT_SSH 环境变量设置为包含对密钥的引用。我目前使用 tunnelier 和 SV 执行此操作,例如,我的 SVN_SSH 变量是“sexec -pk=1”,其中 sexec 是 tunnelier 的 ssh CLI,-pk=1 告诉它在插槽 1 中使用我的私钥。
您可以使用 openssh 键而不是 putty 来执行此操作;putty 面临需要运行选美比赛的挑战,但是使用 openssh 密钥,您只需要 id_rsa 密钥位于 ~/.ssh
我通常这样做的方式是将 Jenkins 设置为作为我创建的新用户运行。我转到用户的主目录(Windows vista 及更高版本默认为 C:\Users\)并创建一个 .ssh 目录,在其中放置一个 id_rsa 文件,其中包含我想以 openssh 格式使用的私钥。
我只需要在 Mac 上想出一个类似的技巧:http: //colonelpanic.net/2011/06/jenkins-on-mac-os-x-git-w-ssh-public-key/