从Subversion标签自动构建

12

我正在尝试自动化工程组的构建过程。作为该自动化的一部分,我正在努力达到一个目标,即应用符合某种模式的特定标记将触发自动化流程,该流程将执行以下操作:

  • 检出源代码
  • 从模板创建构建脚本
  • 构建项目

我相当确定我可以通过 subversion 的 post-hook 实现这一点,但我正努力找出除 subversion 钩子之外的其他方法。

  • 监视 subversion 存储库中的标记目录以启动我的工作流是否有意义?
  • 是否有任何好用的工具可帮助实现此目的(如果可能的话,.NET 是个不错的选择)?
  • 编写引擎是否更好?

我的偏好:

  • 已有的产品可以完成全部或部分工作
  • 如果需要开发工作,最好使用 .NET
  • 与 Windows 兼容(我们有一个基于 Linux 的存储库,但所有构建都在 Windows 上进行)
8个回答

8
我使用Hudson完成了这个任务。在常规的Subversion检出位置,我有一个用于主干的检出:

http://dryad.googlecode.com/svn/trunk/dryad

然后,在第一个构建操作中,我使用svn switch切换到存储库中最新的标签:

svn switch http://dryad.googlecode.com/svn/tags/'svn ls http://dryad.googlecode.com/svn/tags | tail -n 1' dryad

下一步是运行maven 'clean install'命令,使用标记版本的代码开始构建。

我还没有想出如何让Hudson从最新的标记版本开始而不是必须进行切换,但是切换可以正常工作。然后,您可以将触发器设置为标记目录更新时。

这是自动化的...有点笨拙,但它能够正常工作...

切换应该包含第二个svn命令的反引号,但必须使用',因为这里无法显示反引号。


5

我喜欢 Hudson - 它易于设置,并且与 SVN 相容。

你可以将它配置为在每次提交时进行构建。

我下载了它并在一天内开始使用它进行构建。尽管经历了很多调整,但我仍然推荐给任何人使用。

我也使用过 Cruise Control,但不是很满意。我没有特别的理由,只是跨平台问题。

编辑

最近,我在我的 Hudson 构建服务器上添加了一个作业,用于侦听 Google/Gmail Jabber 聊天。我可以使用此机制将“常规”构建提升为“发布”构建。我只需设置一个新的工作,执行将私有构建提升/发布为发布候选版本所需的步骤即可。


4
听起来你需要一个类似于CruiseControl或Hudson的持续集成构建引擎(Hudson是用Java编写的,但在Windows中非常容易使用)。
现在,你可以修改这些工具的构建脚本以监视标签目录,但这可能与初衷有些不符,因为它们旨在监视特定位置并在该位置构建项目。如果你监视整个标签目录,则可能会在构建机器上检出所有标签,并且你需要一个顶级脚本来决定要构建哪个标签。
对于你想要的内容,构建引擎可以监视特定位置(例如'/branches/release')。如果你将内容合并到该分支中,Hudson将自动构建项目、归档工件并为你创建一个标签(请参见Subversion Tagging Plugin)。
我不喜欢从提交后钩子中执行此类操作,因为它会使提交阶段变得太长。然而,TeamCity是一个源代码控制系统,它具有一项功能,可以在提交时执行此操作而不会使你等待。
我建议你使用Hudson

是的,我想你明白我的意思,那就是真正实现发布机制自动化。如果我简化模型,这意味着所有开发人员所做的就是标记发布,其余的都是工作流自动化。我会看一下Hudson。我曾经使用过CC.NET,但它并不适合做这项工作。 - Ajaxx

3

CruiseControl.Net可以轻松地自动化从Subversion存储库进行自动构建。

它可以监视存储库(Svn和其他几种类型),并使用各种工具(NAnt,MSBuild等)启动自动构建。


2

2
我建议您使用Hudson来完成这项任务。我曾经也想过创建一个标签并启动构建,但最终选择了使用Hudson的插件:http://wiki.hudson-ci.org/display/HUDSON/Release+Plugin,它可以驱动标签的创建和显式发布构建。请注意保留HTML标签。

1

我正在使用NAnt(和NAntContrib)进行自动化构建。它会自动检查Subversion存储库中的更改,并获取最新的源代码版本并开始构建(如果有任何更改)。

我不确定现有的任务是否允许您完全按照您的要求执行操作,但也许您可以将其用作起点,如果需要,使用.NET开发特定需求的任务进行扩展。


1

就像其他人所说,您需要一个持续集成服务器(CruiseControl、CruiseControl.Net、Hudson等)。虽然您可以在构建脚本和提交钩子上工作,以执行您描述的功能,但最终您会发现自己重新发明了轮子(持续集成服务器)。没有必要,有免费可用的解决方案。

流程与您上面描述的略有不同。构建服务器将:

  1. 检测到新的提交
  2. 检出您的源代码
  3. 运行您的构建脚本
  4. 成功构建标记

提交触发过程并创建标记,而不是标记触发过程。 服务器通过监视svn存储库而不是提交钩子来执行此操作。

查看CruiseControl.Net文档中关于此主题的选项tagOnSuccess和tagBaseUrl。Hudson和CruiseControl应该具有类似的选项。

http://confluence.public.thoughtworks.org/display/CCNET/Subversion+Source+Control+Block


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接