-1

我在 win32 机器上运行 hudson CI 服务器。构建成功后,我希望将创建的 exe 放在公共网站上。SCP 和 ftp 的 hudon 插件没有按我想要的方式工作(主要是因为它选择了一些奇怪的目录来放置它们)所以我为 hudson 调用的命令行 scp 制作了自己的脚本。

出于某种原因,当在 hudson 环境下运行时,scp bat 文件挂起。当我在同一台机器上从命令行调用它时,它工作正常。

显然,当从任务调度程序运行时,这也会失败。

谁能想到这在哈德逊或调度程序环境中不起作用的原因?

pscp.exe -batch -q -pw mypassword ..\..\installers\Output\myfilename  domain.com@domain.com:domains/domain.com/html/downloads

(请注意,“domain.com”是我的域名的替代品......)

同样,当我从命令行调用该 bat 文件时,它工作得很好。

还要注意 - 我调用 bat 文件的原因是因为我用 svn WCREV 命令替换了文件名 - 因为 hudson 已经脑死亡,无法在 scp 或 ftp 插件或命令行调用中进行替换。这种方法应该可以正常工作,但它会挂起。

pscp 是一个与 Putty 相关的命令行 ssh 程序

我遇到的另一个问题是该项目访问两个 svn 存储库,因此 hudson 感到困惑并且无法在我希望它可用的地方随意提供 svn rev 编号。(一个 repo 用于第三方,另一个是我们的代码库)我们使用代码库中的 svn rev 作为标识符的一部分来命名创建的安装程序。

我很乐意在 hudson(插件)中使用 ftp 或 scp,但考虑到 hudson 决定放置文件的位置(使用内部版本号 - 我不想使用 hudson 的内部版本),它们似乎根本不适合我识别构建的数字 - 我更喜欢 svn 修订版) - 因此我使用命令行版本,但那些也不起作用 - 它们挂起 hudson 构建过程。

4

3 回答 3

3

我自己也遇到了同样的问题。问题是 pscp(与所有 PuTTY 一​​样)需要将您要连接的服务器的主机密钥加载到注册表中(在 中HKEY_CURRENT_USER)。如果没有主机密钥,pscp 将拒绝主机无效(除非您以某种方式对其进行抑制,否则控制台输出中应该会显示一条错误消息。这是一次性的事情,但需要为每个运行的用户完成命令。

这是我使用的基本过程:

  1. 使用 PuTTY 连接到服务器和端口。出现提示时接受主机密钥。
  2. regedit.exe
  3. 浏览至HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys
  4. 将相关的主机密钥导出到.reg文件(右键单击SshHostKeys并选择导出)
  5. 以用户身份登录 Hudson 作为导入导出.reg文件运行

如果 Hudson 作为本地系统运行,您可以使用PsExec此 MSDN 博客中描述的技术以本地系统帐户运行命令。

完成一次后,该命令应该可以在 Hudson 下运行。

编辑

这两个链接只是将命令提示符作为本地系统运行的方法。您可以通过打开服务控制面板 (services.msc) 并找到 Hudson 服务并检查其在 Log On As 列下显示的内容来判断 Hudson 运行的用户 ID。

如果不是本地系统,您应该能够以用户身份登录到 Windows 并导入 reg 文件。如果它作为本地系统(默认)运行,您将无法登录到 Windows,需要使用 PsExec 或 MSDN 博客中描述的技术将注册表文件导入本地系统的HKEY_CURRENT_USER树中。

于 2010-07-12T16:19:43.810 回答
1

用Quest PuTTY升级你的腻子怎么样。它基于 PuTTY 并提供参数 -auto_store_key_in_cache。这应该可以解决您的问题。

另请参阅SuperUser 上的类似问题

于 2010-07-12T18:49:54.000 回答
0

我通过使用能够从命令行运行 scp 命令的帐户解决了我的问题。具体来说,在服务配置中,我将 hudson 服务设置为使用我设置的另一个用户,而不是系统帐户。

这可能不是解决问题的最佳方法,但它在短期内对我有用。

于 2010-07-13T13:46:49.697 回答