我已经开始尝试使用 Hudson 作为构建服务器。我正在使用颠覆并将其配置为每分钟轮询一次。我看到的问题是,如果版本 10 的构建需要 5 分钟并且在此期间有 5 次提交,那么 Hudson 将下一次构建版本 15。
有没有办法确保构建每个修订版?
我已经开始尝试使用 Hudson 作为构建服务器。我正在使用颠覆并将其配置为每分钟轮询一次。我看到的问题是,如果版本 10 的构建需要 5 分钟并且在此期间有 5 次提交,那么 Hudson 将下一次构建版本 15。
有没有办法确保构建每个修订版?
您必须做一些事情来准确构建每个修订版:
REVISION
字符串参数${REVISION}
到存储库 URL,https://server/path/myproject${REVISION}
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
如果要手动触发构建,有两种可能性:
该@
符号非常重要,因为所有这些技巧都依赖于 Subversion 插件解释URL@NNN
为get revision NNN from repository at URL
. 如果你忘记了@
,Subversion 只会说找不到文件夹https://server/path/myprojectNNN
。这也是为什么你必须在 wget 命令%40
之间REVISION=
加上.的转义字符。$REV
%40
@
Hudson 还没有这种能力,但它在邮件列表中被问过几次。见问题 673
在构建配置的 SCM 部分中,您应该有构建触发器部分和选项“远程触发器构建(例如,从脚本)”。根据该选项旁边的帮助信息,您可以编写提交后操作脚本,以便每次提交都会触发新构建。由于 hudson 有构建队列,因此您应该构建每个修订版。
这是一个可以帮助您的链接:https ://hudson.dev.java.net/build.html
这是如何使用参数开始构建作业的示例(有关详细信息,请参阅我的评论): http ://wiki.hudson-ci.org/display/HUDSON/Parameterized+Build
确保每个提交都在 Hudson 中构建的关键是“参数化构建”,并且只有在使用不同参数值触发构建时,hudson 才会认为它是新构建并且应该保留在构建队列中。或者它不会被 Hudson 记录,因为它认为它与以前的构建相比毫无意义
例如,您可以单击“立即构建”以触发构建三次,然后将构建参数保留为“null”。您将看到只有前两个构建在 Hudson 队列中。第三个将被忽略 :P 很酷,但是在某些文档中没有找到它真的很糟糕,但是我的实验多次:(
我采用了上面的 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