7

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

有没有办法确保构建每个修订版?

4

5 回答 5

10

您必须做一些事情来准确构建每个修订版:

  • 为您的工作添加一个REVISION字符串参数
  • 将参数附加${REVISION}到存储库 URL,
    例如:https://server/path/myproject${REVISION}
  • 将本地文件夹的名称设置为'myproject'(见上例),因为REVISION变量只是在URL中展开,但是在创建文件夹时,Hudson不会展开它,导致文件夹命名为:myproject${REVISION}
  • 从提交后挂钩触发参数化构建,如下所示: /usr/bin/wget \ --auth-no-challenge \ --no-check-certificate \ --user=me \ --password=mypasswd \ https: //server/path/job/jobname/buildWithParameters?delay=0sec\&REVISION=%40$REV \ -O /dev/null

如果要手动触发构建,有两种可能性:

  • 如果要构建 HEAD 修订版,则必须将 REVISION 参数留空
  • 如果你想建立一个特定的版本,你必须输入@NNN(例如:@1234)。

@符号非常重要,因为所有这些技巧都依赖于 Subversion 插件解释URL@NNNget revision NNN from repository at URL. 如果你忘记了@,Subversion 只会说找不到文件夹https://server/path/myprojectNNN。这也是为什么你必须在 wget 命令%40之间REVISION=加上.的转义字符。$REV%40@

于 2010-05-06T10:04:47.200 回答
4

Hudson 还没有这种能力,但它在邮件列表中被问过几次。见问题 673

于 2009-06-25T12:35:51.097 回答
1

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

这是一个可以帮助您的链接:https ://hudson.dev.java.net/build.html

这是如何使用参数开始构建作业的示例(有关详细信息,请参阅我的评论): http ://wiki.hudson-ci.org/display/HUDSON/Parameterized+Build

于 2009-06-04T07:51:53.920 回答
0

确保每个提交都在 Hudson 中构建的关键是“参数化构建”,并且只有在使用不同参数值触发构建时,hudson 才会认为它是新构建并且应该保留在构建队列中。或者它不会被 Hudson 记录,因为它认为它与以前的构建相比毫无意义

例如,您可以单击“立即构建”以触发构建三次,然后将构建参数保留为“null”。您将看到只有前两个构建在 Hudson 队列中。第三个将被忽略 :P 很酷,但是在某些文档中没有找到它真的很糟糕,但是我的实验多次:(

于 2010-05-06T22:58:40.847 回答
0

我采用了上面的 fchateaus 方法(谢谢!)并将其修改为与 Mercurial 一起使用。

您将需要在中央服务器上编辑 .hg/hgrc,并放入一个更改组挂钩。请记住,changegroups 仅将第一个变更集设置为 HG_NODE 环境变量,因此您必须执行 hg tip 来获取真正的 tip 节点并通过 URL 传递它。在单列中做一些技巧,但我想通了。

这就是您为在Windows上运行的 Hudson 所做的。

[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
于 2010-12-30T20:51:06.353 回答