可以将Hudson配置为构建每个修订版吗?

时间:2009-06-04 07:44:50

标签: svn continuous-integration hudson build-server

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

有没有办法确保每个版本都已构建?

5 个答案:

答案 0 :(得分:10)

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

  • 在作业中添加REVISION字符串参数
  • ${REVISION}参数附加到存储库URL,
    例如:https://server/path/myproject${REVISION}
  • 将本地文件夹的名称设置为“myproject”(参见上一个示例),因为REVISION变量仅在URL中展开,但在创建文件夹时,Hudson不会展开它,导致名为myproject${REVISION}
  • 的文件夹
  • 从post-commit钩子触发参数化构建,如下所示: /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@NNN解释为get revision NNN from repository at URL的事实。如果您忘记@,Subversion会说它无法找到文件夹https://server/path/myprojectNNN。这也是为什么你必须在%40REVISION=之间放置$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