Hudson无法从Git中获取代码

5

我已经在这个问题上苦苦挣扎了一整天,它让我发疯!

  • 我在Win7 PC上安装了Git,并选择了PuttyGen选项进行安装。
  • 我使用PuttyGen生成了ssh密钥,并将ssh密钥添加到我的Git帐户中,并链接了Pageant中的私钥。
  • 我设置了GIT_SSH,使其指向我的putty plink.exe。
  • 我使用Putty连接到codaset和git,以将它们作为已知主机接受。

在控制台中,我可以克隆,但Hudson失败了:

Fetching upstream changes from git@codaset.com:xxx/xxx.git
[workspace] $ "C:\Program Files\Git\bin\git.exe" fetch -t git@codaset.com:xxx/xxx.git +refs/heads/*:refs/remotes/origin/*
ERROR: Problem fetching from origin / origin - could be unavailable. Continuing anyway
ERROR: Could not fetch from any repository
FATAL: Could not fetch from any repository
hudson.plugins.git.GitException: Could not fetch from any repository
    ...

如果我在控制台中运行完全相同的git命令,它可以正常工作:

"C:\Program Files\Git\bin\git.exe" fetch -t git@codaset.com:xxx/xxx.git +refs/heads/*:refs/remotes/origin/*

我尝试了直接使用plink连接到GitHub:

plink -agent -v git@github.com
Looking up host "github.com"
...
Pageant is running. Requesting keys.
Pageant has 1 SSH-2 keys
Using username "git".
...
Authenticating with public key "rsa-key-20110121" from agent
...
Hi xxx! You've successfully authenticated, but GitHub does not provide
 shell access.

我随后尝试连接到Codaset:

plink -agent -v git@codaset.co
m
Looking up host "codaset.com"
Pageant is running. Requesting keys.
Pageant has 1 SSH-2 keys
Using username "git".
...
Authenticating with public key "rsa-key-20110121" from agent
...
Opened channel for session
Server refused to allocate pty
Started a shell/command
Error: Command is required.
...
Server sent command exit status 255
Disconnected: All channels closed

所以,与git不同,codaset的响应略有不同。然而,我认为这可能是一个误导,因为如果我尝试从hudson连接到标准的git项目,我会得到相同的错误。

我还设置了Go Server(之前是CruiseControl),并在此处尝试连接到git时遇到类似的错误:

ERROR: FATAL ERROR: Disconnected: No supported authentication methods available
ERROR: fatal: The remote end hung up unexpectedly

这让我想到问题可能出在认证上,而不是Hudson细节上...

像往常一样,非常感谢您的帮助!

4个回答

2

这可能是一个权限问题。你可以在同一台机器上使用git clone,但我猜测你没有使用运行Hudson的相同用户进行操作。切换到该用户,然后再试一次。这可能会暴露问题。


1
不错,这很有道理,如果我从控制台运行Hudson,它可以工作,但如果我将Hudson作为服务运行,它就无法工作。干杯! - laura

0

当我通过Putty Plink.exe与被叫方进行交互时,我收到了一个SSH致命错误“服务器拒绝启动shell/command”。

我注意到问题在于我的被叫方处于交互模式。例如,在我连接到被叫方之后,被叫方要求我按任意键继续。在我按下Enter键并输入命令后,我需要输入“exit”,然后按“Enter”退出SSH连接。

为了使其与被叫方交互,我构建了以下命令:

注:这里使用PowerShell代码作为示例。

$Commands= @" 

    show status 
    exit 
    exit
"@

请注意,上述参数中的每个换行符都代表“Enter”键。 然后,我将Commands参数传递给plink.exe,如下所示:
$output = $Commands |.\Putty\plink.exe -auto_store_key_in_cache -l $UserName -pw $Password $CalledPartyIP -v 2>&1

它将向plink传递一系列命令,并将详细结果输出到$output变量。

希望这可以帮助!


0

HUDSON 是否在您可以成功获取的同一台机器上运行?如果不是,则可能需要在那台机器上生成一个 SSH 密钥,并将其添加到您的 GitHub 帐户中。

无论如何,第一个问题(除非我在您的问题中错过了它)是 HUDSON 运行在哪里。


谢谢回复。我可以成功地从Hudson运行的同一台机器上获取/克隆。(事实上,我甚至尝试手动克隆到我的Hudson工作区,看看是否能帮助解决问题。但是它没有起作用...) - laura

0
经过漫长的斗争,我通过在控制台中运行Hudson而不是作为服务来解决了这个问题...虽然不是理想的解决方案,但在这个星期五的时候已经足够了!

1
SSH密钥往往是用户特定的。如果您将其作为服务运行,很可能是在不同的用户帐户下运行(因此导致权限问题)。 - jerhinesmith

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