我已经开始尝试使用Hudson作为构建服务器。我正在使用subversion并将其配置为每分钟轮询一次。我看到的问题是,如果版本10的版本需要5分钟,并且在此期间有5次提交,Hudson将在下一次构建版本15。
有没有办法确保每个版本都已构建?
答案 0 :(得分:10)
您必须做一些事情来构建每个修订:
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
。这也是为什么你必须在%40
和REVISION=
之间放置$REV
wget命令,%40
是@
的转义字符。
答案 1 :(得分:4)
Hudson还没有这种能力,但已经在邮件列表上要了几次。见issue 673
答案 2 :(得分:1)
在构建配置的SCM部分中,您应该具有构建触发器部分和选项“远程触发构建(例如,从脚本)”。根据该选项旁边的帮助信息,您可以编写提交后操作的脚本,以便每次提交都会触发新的构建。由于hudson已经构建了队列,因此您应该构建每个修订版本。
以下链接可以帮助您:https://hudson.dev.java.net/build.html
以下是如何使用参数启动构建作业的示例(有关详细信息,请参阅我的注释): http://wiki.hudson-ci.org/display/HUDSON/Parameterized+Build
答案 3 :(得分:0)
确保每个提交都是在Hudson中构建的关键是“参数化构建”,并且只有触发构建时使用不同的参数值,hudson会认为它是新构建,应该保存在构建队列中。或者它不会被Hudson录制,因为它认为与之前的版本相比它是无意义的构建
e.g。您可以单击“立即生成”以触发构建三次,并将构建段保留为“null”。你会看到只有前两个版本在Hudson队列中。第三个将被忽略:P很酷,但是在某些文档中找不到它,但是我的实验时间很少:(
答案 4 :(得分:0)
我采用上面的fchateaus方法(感谢man!)并将其修改为与Mercurial一起使用。
您需要在中央服务器上编辑.hg / hgrc,然后输入changegroup hook。请记住,更改组仅将第一个更改集设置为HG_NODE环境变量,因此您必须执行hg提示以获取实际的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