如何使用 git 插件为 Hudson 指定 SSH 密钥?

jlp*_*lpp 7 ssh git hudson

我有 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
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何设置以便 git 插件/msysgit 在尝试克隆时知道使用特定的 SSH 私钥?我不认为 Pageant 会起作用,因为 Tomcat 服务是作为“本地系统”用户运行的,但我可能错了。

编辑:

我已经尝试将 Pageant 设置为服务(使用 runassvc.exe),传递适当的密钥,并让它作为“本地系统”运行。其他服务似乎无法从选美服务中看到密钥。

小智 2

您绝对应该能够在非系统用户下运行它。选择/创建一个用户来运行 Hudson,然后尝试使用 ssh user@host 连接到服务器。如果它要求输入密码,那么它显然不会找到您的密钥。

在这种情况下,请仔细检查该密钥是否已加载到 pageant 中(您需要让 pageant 在每次启动时从磁盘加载相关密钥),并且是否设置了 GIT_SSH 环境变量。

另一种方法是设置 GIT_SSH 环境变量以包含对该密钥的引用。我目前使用tunnelier和SV执行此操作,因此例如我的SVN_SSH变量是“sexec -pk=1”,其中sexec是tunnelier的ssh CLI,而-pk=1告诉它使用我在插槽1中的私钥。