Svn Hudson是否可以配置为生成每个版本?
我已经开始尝试使用Hudson作为构建服务器。我正在使用subversion,并将其配置为每分钟轮询一次。我看到的问题是,如果版本10的构建需要5分钟,并且在此期间有5次提交,Hudson将下一次构建版本15Svn Hudson是否可以配置为生成每个版本?,svn,continuous-integration,hudson,build-server,Svn,Continuous Integration,Hudson,Build Server,我已经开始尝试使用Hudson作为构建服务器。我正在使用subversion,并将其配置为每分钟轮询一次。我看到的问题是,如果版本10的构建需要5分钟,并且在此期间有5次提交,Hudson将下一次构建版本15 是否有办法确保生成每个版本?在生成配置的SCM部分,您应该有生成触发器部分和选项“远程触发生成(例如,从脚本)”。根据该选项旁边的帮助信息,您可以编写提交后操作脚本,以便每次提交都会触发新的构建。由于hudson有构建队列,所以您应该构建每个版本 这里有一个链接可以帮助您: 以下是如何使用
是否有办法确保生成每个版本?在生成配置的SCM部分,您应该有生成触发器部分和选项“远程触发生成(例如,从脚本)”。根据该选项旁边的帮助信息,您可以编写提交后操作脚本,以便每次提交都会触发新的构建。由于hudson有构建队列,所以您应该构建每个版本 这里有一个链接可以帮助您: 以下是如何使用参数启动生成作业的示例(有关详细信息,请参阅我的评论):
哈德逊目前还没有这项功能,但在邮件列表中有几次要求提供这项功能。请参见要准确构建每个修订版,您必须做几件事:
- 在作业中添加
字符串参数REVISION
- 将
参数附加到存储库URL,${REVISION}
e、 g.:https://server/path/myproject${REVISION}
- 将本地文件夹的名称设置为“myproject”(请参见上一个示例),因为
变量仅在URL中展开,但在创建文件夹时,Hudson不会展开它,从而生成名为:REVISION
myproject${REVISION}
- 从提交后挂钩触发参数化生成,如下所示:
/usr/bin/wget\ --没有挑战\ --无支票证明\ --用户=我\ --密码=mypasswd\ https://server/path/job/jobname/buildWithParameters?延迟=0秒\&REVISION=%40$REV\ -O/dev/null
- 如果要生成头部修订,则必须将修订参数保留为空
- 如果要生成特定的修订,必须输入@NNN(例如@1234)
@
符号非常重要,因为所有这些技巧都依赖于Subversion插件解释URL@NNN
as从URL的存储库获取修订版NNN
。如果您忘记了@
,Subversion只会说它找不到文件夹https://server/path/myprojectNNN
。这也是为什么在wget命令中必须将%40
放在REVISION=
和$REV
之间,%40
是@
的转义字符
确保每个提交都在Hudson中构建的关键是“参数化构建”,并且只有当触发器构建具有不同的参数值时,Hudson才会认为它是新构建,并且应该保存在构建队列中。否则它将不会被哈德森记录下来,因为它认为它与之前的相比毫无意义。
e、 你可以点击“Build Now”触发Build三次,只需将Build段落保留为“null”。您将看到Hudson队列中只有前两个构建。第三个问题将被忽略:P很酷,但很糟糕的是,在一些文档中没有找到,但在我的多次实验中:(
我采用了上面的fchateaus方法(谢谢你!),并将其修改为与Mercurial一起使用
您需要在中央服务器上编辑.hg/hgrc,并放入一个changegroup钩子。请记住,changegroups只将第一个变更集设置为hg_节点环境变量,因此您必须执行hg-tip来获取真正的tip节点,并通过URL进行传递。这在一行程序中有点小技巧,但我发现了这一点 这就是在Windows上运行Hudson所要做的你必须注意,这不会给Hudson带来性能问题。例如,如果你每隔几秒钟进行一次提交,而Hudson构建只需要几分钟。很快你就会淹没构建队列。就我而言,我不明白为什么需要这样做。为什么代码库的当前状态之外的其他东西会很重要tant?嗨,sal,这是因为测试。我们的目标是对每个修订版进行回归测试。因此,如果我们没有构建每个修订版,我们就不会测试每个修订版。如果修订版n正常工作,这会导致问题,但修订版n+10不正常,并且我们没有测试其间的任何修订版。哪个更改导致了回归?我相信Hudson现在有一个检查作业配置上标记为“允许并发生成”的框…不确定这是否会直接起作用-第一次提交将触发一个生成,然后3次提交将在第1次完成之前触发3个进一步的生成。不幸的是,队列中的第二次生成将进行更新并生成最新版本-以下生成也一样。需要什么才能将修订号传递给生成请求和ha我在更新过程中使用了这个数字。你是对的,我没有考虑过那个明显的场景。但正如我在hudson文档中看到的,可以使用参数调用构建作业,这样你就可以定义构建字符串参数RevisionToBuild,并从脚本中设置它,如下所示:“当然,正确地修改svn存储库路径以使用该参数。但是您可以使生成队列仅具有一个作业深度(对于给定的生成执行器,设置“#of executors”)这将得到你想要的结果…即使并行构建会更快。我查找了那个bug。bug追踪器已经移动,问题现在已经解决,仍然没有解决。
[hooks]
# this uses wget to hit the hudson url responsible for starting a build - %HG_NODE% only gets first changeset of changegroup, so use hg tip to grab changeset most recently added instead
changegroup.hudson = for /f "tokens=*" %G IN ('hg tip --template {node}') DO "C:\Program Files (x86)\UnxUtils\usr\local\wbin\wget" --non-verbose --spider http://HudsonServer:8080/job/{Repository}/buildWithParameters?HgRevId=%G | ECHO Result of Hudson Polling Request For Node %G
# TODO: when Hudson implements polling with parameters, change to something like this
#changegroup.hudson = for /f "tokens=*" %G IN ('hg tip --template {node}') DO "C:\Program Files (x86)\UnxUtils\usr\local\wbin\wget" --non-verbose --spider http://HudsonServer:8080/job/{Repository}/polling?HgRevId=%G | ECHO Result of Hudson Polling Request For Node %G