如何将上游构建的二进制文件传递给远程下游构建节点

4
我们正在Windows上使用Hudson来构建.NET解决方案并运行单元测试(NUnit)。因此,Hudson用于启动执行实际工作的批处理文件。
我现在正在尝试设置一个新的测试,该测试将在构建从机上运行,并且将运行很长时间。该测试应使用上游构建生成的二进制文件。
我已经搜索了Hudson文档,但是我找不到如何将上游构建产物传递给下游从机的方法。我该如何做?

什么操作系统?你能否执行一个shell脚本/批处理文件? - mmr
@mmr:“我们在Windows上使用Hudson……”我需要将一堆文件传递到“另一台机器”的构建节点。 - sbi
那么,在Windows上,为什么不通过批处理脚本将它复制到网络共享中呢?我们的Hudson安装使用批处理脚本来移动各种东西,例如服务器生成的最终构建版本到分发服务器供测试人员使用。(是啊,我真是个白痴,没看到Windows的评论)。 - mmr
@mmr:将它通过网络复制需要双方的权限、磁盘空间和同步(数十兆字节需要时间来复制,那么并行构建呢?)要被处理好。我真傻,以为Hudson会默认提供这个功能。 - sbi
3个回答

7

在你的下游构建中使用Copy Artifact插件

只需指定上游作业的名称和要复制到下游工作空间的路径即可。


这似乎确实是我所需要的。我刚刚安装了它,在下游项目中,我现在可以添加一个构建步骤来复制工件。然而,我不确定如何使用它。假设我需要上游项目工作区中的一个文件夹,我需要输入什么?“path/to/folder”好像不起作用。 - sbi
我不相信你可以只指定一个目录;插件是针对文件工作的。但是模式 path/to/folder/** 应该能解决问题(即复制在此目录及其子目录中找到的所有文件)。 - Christopher Orr
好的,我已经为上游构建编写了构建脚本,现在将该文件夹压缩并作为 Hudson 的 artifact 进行收集。下游测试已配置为复制该 artifact。然而,我总是收到“从 <project> 复制了 0 个 artifact”的消息。有什么想法出了问题吗? - sbi
嗯。你确定在上游项目中捕获了zip文件作为artifact吗?否则,我会确保插件中指定的路径或模式与zip文件的路径完全匹配。您可以使用http://hudson/job/project-name/lastSuccessfulBuild/artifact/来检查zip文件被保存的确切路径。 - Christopher Orr
好的,经过一番摸索,我终于让它运行起来了。非常感谢你的帮助! - sbi

1
根据您使用的源代码管理工具,您可以作弊并使用它。我不喜欢检入二进制文件,特别是如果它们很大的话。但是,过去我曾经采用生成的二进制文件或通过CI构建生成的安装程序自动进行检入到一个单独的svn存储库,并在由主机指示时从该存储库中获取并执行所需的任何测试的从机。

那样做是可行的,但是一个保存了无用二进制文件的SVN仓库真的会浪费资源。我以为Hudson自带这个功能,但如果需要的话,我愿意尝试使用扩展插件。 - sbi
如果它们不需要,那么使用它们将是一种资源浪费,我同意这一点。我们保留了这些资源,以便如果某个测试失败,我们有安装文件可以发送给测试人员重新创建问题。当然,你应该能够从构建所来自的 repo 版本重新构建,但我们发现这样更容易。自动化构建可以在 checkin 的注释中放入生成二进制文件的 repo 版本号。 - Rob Goodwin

0

如果你只依赖于二进制文件,那么这可能有点过度。但是还有Clone Workspace SCM Plugin,它可以归档整个工作区,并且您可以像从SCM中获取一样在下一个作业中检查它。它非常新。

我们目前使用不同的设置。我们有一个Artifact Repository,我们将二进制文件推送到其中。第二个作业从该存储库中提取二进制文件。物理上,它只是一个标准的Windows共享,我们在其中创建一个带有作业构建编号的子文件夹。如果您还使用[Parameterized Trigger Plugin] [2],则可以将作业1的构建编号传递给作业2,并在正确的二进制文件上运行测试。副作用是,您可以在Hudson中不保留长时间历史记录的情况下稍后重复使用二进制文件。

[2]: http://Parameterized Trigger Plugin


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