代码之家  ›  专栏  ›  技术社区  ›  Tim

如何让SCP和ftp(从命令行,而不是插件)在hudson中工作

  •  -1
  • Tim  · 技术社区  · 14 年前

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

    但由于某些原因,当在hudson环境下运行时,scp bat文件会挂起。当我在同一台机器上从命令行调用它时,它工作得很好。

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

    有谁能想到在hudson或scheduler环境中这不起作用的原因吗?

    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 is a command line ssh program associated with Putty .

    另外一个问题是,这个项目访问两个svn存储库,这样哈德逊就会感到困惑,无法在我希望它可用的地方随意提供svn版本号。(一个repo用于第三方,另一个是我们的代码库)我们使用代码库中的svn rev作为标识符的一部分来命名创建的安装程序。

    我很乐意在hudson(插件)中使用ftp或scp,但考虑到hudson决定放置文件的位置(使用内部版本号-我不想使用hudson的内部版本号来标识内部版本-我更喜欢svn版本),它们对我来说似乎根本不起作用,因此我使用命令行版本,但这些版本也不起作用-他们把哈德逊建造过程挂起来了。

    3 回复  |  直到 14 年前
        1
  •  3
  •   ig0774    13 年前

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

    这是我使用的基本过程:

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

    如果Hudson作为本地系统运行,您可以使用 PsExec 或所描述的技术 on this MSDN blog 以本地系统帐户的身份运行命令。

    一旦您完成了这一次,命令应该在Hudson下运行。

    编辑

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

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

        2
  •  1
  •   Community Nick Bolton    7 年前

    把你的油灰用 Quest PuTTY . 它基于PuTTY并提供参数auto_store_key_in_cache。这应该能解决你的问题。

    另见 similar question on SuperUser .

        3
  •  0
  •   Tim    14 年前

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

    这不太可能是解决问题的最好办法,但在短期内对我有效。