如何将上游构建的二进制文件传递到远程下游构建从属服务器

How to pass binaries built upstream to a remote downstream build slave

提问人:sbi 提问时间:4/30/2010 最后编辑:Christopher Orrsbi 更新时间:5/6/2010 访问量:902

问:

我们在 Windows 上使用 Hudson 来构建 .NET 解决方案并运行单元测试 (NUnit)。因此,Hudson 用于启动执行实际工作的批处理文件。

我现在正在尝试设置一个新的测试,该测试将在构建从属设备上运行,并且将运行很长时间。测试应使用上游生成生成的二进制文件。

我已经搜索了 Hudson 文档,但我找不到如何将上游构建工件传递给下游从站。我该怎么做?

.NET Windows 哈德逊

评论

0赞 mmr 4/30/2010
什么操作系统?你能只执行一个shell脚本/批处理文件吗?
0赞 sbi 4/30/2010
@mmr:“我们在 Windows 上使用 hudson...”我需要将一堆文件传递给另一台计算机上的构建从属设备。
0赞 mmr 4/30/2010
那么,在 Windows 上,为什么不通过批处理脚本通过网络共享复制它呢?我们的 hudson 安装使用批处理脚本来移动内容,例如服务器生成的最终构建版本到测试人员的分发服务器。(是的,我没有看到 Windows 评论)。
0赞 sbi 4/30/2010
@mmr:通过网络复制它需要双方的权限、磁盘空间和同步(复制需要十几个 MB 的时间,而并行构建呢?)才能得到照顾。愚蠢的我,我以为哈德森会开箱即用。

答:

1赞 Rob Goodwin 4/30/2010 #1

根据您使用的源代码管理管理,您可以作弊并使用它。我不喜欢签入二进制文件,尤其是当它们很大时。但是我过去曾使用通过 CI 构建生成的二进制文件或安装程序,自动将它们签入到单独的 svn 存储库中,并在主服务器指示时让从属机器从该存储库中提取并执行您需要执行的任何测试。

评论

0赞 sbi 4/30/2010
这是可行的,但是保存没有人需要的二进制文件的SVN存储库确实是浪费资源。我以为哈德森具有开箱即用的能力,但如果需要的话,我愿意摆弄扩展。
0赞 Rob Goodwin 4/30/2010
我同意 - 如果不需要它们,那将是浪费资源。我们保留了这些资源,因此,如果由于某种原因测试失败,我们可以将安装文件发送到测试以重现问题。当然,您应该能够从构建来自的存储库修订版重新生成,但我们发现它更容易。自动构建可以在签入的注释中放入二进制文件生成的存储库的转速
7赞 Christopher Orr 4/30/2010 #2

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

只需指定上游作业的名称以及要复制到下游工作区的路径即可。

评论

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

如果你只依赖于二进制文件,这对你来说可能有点矫枉过正。但也有克隆工作区 SCM 插件,它可以存档您的整个工作区,您可以在下一个作业中检查它,就好像它来自 SCM 一样。这是很新的。

我们目前使用不同的设置。我们有一个 Artifact Repository,我们在其中推送二进制文件。第二个作业从该存储库中提取二进制文件。从物理上讲,它只是一个标准的 Windows 共享,我们在其中创建一个包含作业内部版本号的子文件夹。如果您还使用 [参数化触发器插件][2],则可以将内部版本号从作业 1 传递到作业 2,并在正确的二进制文件上运行测试。副作用是,您可以稍后重用二进制文件,而无需在 Hudson 中保留很长的历史记录。

[2]: http://Parameterized 触发器插件