我怎样才能确保我所有的哈德森构建奴隶检查出每日构建的相同svn修订版?

时间:2010-08-01 06:16:26

标签: svn build hudson race-condition

我的工作场所使用Hudson进行日常构建,有几个构建从属服务器(一个Linux,一个Windows,一个Mac)从svn检查我们的完整代码库,并在每天午夜构建我们的应用程序。这一切都运作良好。

偶尔会出现问题......有时开发人员会工作到很晚,并会在午夜之后检查svn的更改。发生这种情况时,某些每日构建从服务器可能会在处理svn提交之前执行'svn checkout',而其他构建从服务器将在处理提交后执行此操作。当发生这种情况时,我们最终会在不同的平台上构建不同的版本......例如Mac版本可能是SVN版本5555的版本,而Windows版本最终是SVN版本5556的版本。这很糟糕,因为我们希望给定日期的所有每日构建都基于相同的代码库。

我认为避免这种情况的一种方法是禁止开发人员在晚上11:30到12:30之间提交svn,但我更喜欢一种不依赖于开发人员行为的更优雅的解决方案。有吗?特别是,如果有办法告诉hudson检查当前午夜当前代码的修订版本(例如“svn co -r {”the-current-date“}”)而不是签出HEAD,我认为这可能会成功。

有没有一种常见/简单的方法来处理这个问题?

2 个答案:

答案 0 :(得分:3)

解决方案取决于您如何开始构建。如果它们都是定时器启动的,你可以让它们全部同时启动。您最终获得不同修订的风险将是最小的。更优雅的版本是让一个作业触发所有构建作业,将修订作为参数传递。如果构建时间不是太长,您可以构建一个作业,而不是将修订版本传递给所有其他作业。

编辑:目前Hudson(1.376)

不支持以下内容

我也找到了一个不错的svn book。它声明您可以使用花括号中的日期替换修订。因此,您可以在作业配置中尝试<svn-url>@{00:00}

答案 1 :(得分:0)

我发现有用的另一个想法是在奴隶之间共享相同的源目录并拥有一个 svn up命令,这减少了svn更新的时间,也让你免于痛苦 同步。

我在linux机器上使用nfs,sshfs也可以使用。