Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Svn Hudson是否可以配置为生成每个版本?_Svn_Continuous Integration_Hudson_Build Server - Fatal编程技术网

Svn Hudson是否可以配置为生成每个版本?

Svn Hudson是否可以配置为生成每个版本?,svn,continuous-integration,hudson,build-server,Svn,Continuous Integration,Hudson,Build Server,我已经开始尝试使用Hudson作为构建服务器。我正在使用subversion,并将其配置为每分钟轮询一次。我看到的问题是,如果版本10的构建需要5分钟,并且在此期间有5次提交,Hudson将下一次构建版本15 是否有办法确保生成每个版本?在生成配置的SCM部分,您应该有生成触发器部分和选项“远程触发生成(例如,从脚本)”。根据该选项旁边的帮助信息,您可以编写提交后操作脚本,以便每次提交都会触发新的构建。由于hudson有构建队列,所以您应该构建每个版本 这里有一个链接可以帮助您: 以下是如何使用

我已经开始尝试使用Hudson作为构建服务器。我正在使用subversion,并将其配置为每分钟轮询一次。我看到的问题是,如果版本10的构建需要5分钟,并且在此期间有5次提交,Hudson将下一次构建版本15


是否有办法确保生成每个版本?

在生成配置的SCM部分,您应该有生成触发器部分和选项“远程触发生成(例如,从脚本)”。根据该选项旁边的帮助信息,您可以编写提交后操作脚本,以便每次提交都会触发新的构建。由于hudson有构建队列,所以您应该构建每个版本

这里有一个链接可以帮助您:

以下是如何使用参数启动生成作业的示例(有关详细信息,请参阅我的评论):

哈德逊目前还没有这项功能,但在邮件列表中有几次要求提供这项功能。请参见

要准确构建每个修订版,您必须做几件事:

  • 在作业中添加
    REVISION
    字符串参数
  • ${REVISION}
    参数附加到存储库URL,
    e、 g.:
    https://server/path/myproject${REVISION}
  • 将本地文件夹的名称设置为“myproject”(请参见上一个示例),因为
    REVISION
    变量仅在URL中展开,但在创建文件夹时,Hudson不会展开它,从而生成名为:
    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