2010-08-01 25 views
5

我的工作场所将Hudson用于其日常构建,其中有几个构建奴隶(一个Linux,一个Windows,一个Mac),从svn检查我们的完整代码库并在每天午夜构建我们的应用程序。这一切运作良好。我该如何确保我的所有哈德森版本的奴隶都能检查出日常版本的相同svn版本?

虽然有时会发生偶尔的问题...有时开发人员工作会很晚,并会在午夜之后检查svn的更改。发生这种情况时,可能会有一些每日构建的从站在svn提交处理之前执行它们的“svn checkout”,而其他构建从站将在处理提交之后执行它。发生这种情况时,我们会在不同的平台上构建不同的修订版本。 Mac版本可能是SVN版本5555的版本,而Windows版本最终是SVN版本5556的版本。这很糟糕,因为我们希望给定日期的所有日常版本都基于相同的代码库。

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

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

+0

在凌晨1点开始构建? :) – 2010-08-02 22:13:32

+0

大声笑,这是一个很好的。我希望他们没有问题,以便开发者在那里直到下午1点甚至更晚。 ;) – 2010-10-06 17:45:56

回答

3

解决方案取决于您如何开始构建。如果他们都开始计时,你可以让他们都在同一时间开始。最终产生不同修订的风险将很小。更优雅的版本是让一个作业触发所有构建作业将修订作为参数传递。如果构建时间不长,则可以构建一个将修订传递给所有其他作业的作业。

编辑:目前,下列不被哈德森(1.376)支持

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

+0

@ {00:00}技巧很整洁;不幸的是,它不能通过嵌入在哈德森内的基于java的svn客户端工作。另外一个考虑是如果你的版本库使用svn:externals,那么我相信外部版本可能会被错误的版本取代。 – jdkoftinoff 2010-10-06 13:25:20

+0

我也注意到了。 :( – 2010-10-06 19:53:51

0

我发现有用的另一个想法是共享的奴隶之间的相同的源代码目录,并有一个 svn的向上命令,这减少SVN更新的时间,并且还从同步的痛苦 放了你。

我在Linux机器上使用nfs,sshfs也可以工作。