从subversion标签自动构建

时间:2009-02-06 19:51:45

标签: svn build-process build-automation build-management

我正在尝试自动化工程组的构建过程。作为自动化的一部分,我试图达到这样的程度,即应用符合模式的特定标记的行为将启动一个自动化过程,该过程将执行以下操作:

  • 查看源代码
  • 从模板
  • 创建构建脚本
  • 构建项目

我很确定我可以通过subversion中的post-hook来做到这一点,但是我试图找出一种方法来使用subversion hook之外的其他东西。

  • 监控subversion存储库中的tags目录以启动我的工作流程是否有意义?
  • 是否有任何可行的工具可以帮助解决这个问题(如果可能的话,.NET会很棒)。
  • 我最好只写一个引擎来做这件事吗?

我的偏好:

  • 完成全部或部分工作的现有产品
  • 如果需要进行开发工作,最好使用.NET
  • 适用于Windows(我们有一个基于Linux的仓库,但是所有内容都在Windows上进行)

8 个答案:

答案 0 :(得分:8)

我是用Hudson完成的。在常规的subversion checkout插槽中,我有一个checkout for trunk:

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

然后作为第一个构建操作,我有一个“执行shell”,并在该shell中使用svn开关更改为存储库中的最新标记:

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

下一个构建步骤是maven“clean install”命令,它使用标记版本的代码启动构建。

我还没弄明白如何让Hudson从最新的标记版本开始,而不是必须进行切换,但是交换机可以工作。然后,您可以在标记目录更新时使用触发器。

它是自动化的...有点像kludge,但它有效...

开关应该包含第二个svn命令的反引号,但必须使用'因为这里没有显示反引号。

答案 1 :(得分:5)

我喜欢hudson - 很容易设置和开箱即用的SVN。

您可以将其配置为在每次提交时构建。

我下载了它,并在一天内开始使用它。它经历了很多调整,但我会推荐给任何人。

我也使用了巡航控制,但对此并不满意。除了跨平台问题,我没有任何具体原因。

修改

我最近在我的hudson构建服务器上添加了一个工作,该服务器监听google / gmail jabber聊天。我可以使用这种机制“推广”一个“常规”构建到发布版本。我刚刚创建了一个新工作,它完成了将私有构建升级到发布候选版本所需的步骤。

答案 2 :(得分:4)

听起来像是在经历了像CruiseControl或Hudson这样的持续集成构建引擎之后(hudson用java编写,但在windows中非常容易使用)。

现在你可以捏造这些工具的构建脚本来观察标签目录,但这对于谷物而言是有点不利的,因为它们旨在观察特定位置并在该位置构建项目。如果您观看整个标签目录,您可能很容易就会在构建计算机上检出所有标签,并且您需要一个顶级脚本来决定要构建哪个标签。

根据您的需要,构建引擎可以查看特定位置(例如'/ branches / release')。如果你然后合并到那个分支,Hudson将自动构建项目,存档工件并为你创建一个标记,如果它成功的话(参见 Subversion标记插件)。

我不喜欢在提交后挂钩中执行此类操作,因为它会使提交阶段花费太长时间。但是,TeamCity是一个源代码控制系统,其功能可以完全实现,而不会在提交时阻止您。

我建议你Hudson

答案 3 :(得分:3)

CruiseControl.Net可以轻松地从subversion存储库自动构建自动构建。

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

答案 4 :(得分:2)

为了这个目的,我们已经在这个网站上宣传了一个商业产品!

http://www.finalbuilder.com/Default.aspx?tabid=314

您可能需要向SVN添加一个后挂钩以触发构建启动,除非您希望它以时间表运行。

答案 5 :(得分:2)

我也推荐哈德森。我当时希望做类似的事情,创建一个标签并开始构建。相反,我选择将此插件用于hudson:

http://wiki.hudson-ci.org/display/HUDSON/Release+Plugin

并使用它来驱动标记的创建和显式发布版本。

答案 6 :(得分:1)

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

我不确定现有任务是否允许完全按照您的意愿执行,但也许您可以将其作为一个开始使用,如果需要,可以根据您的特殊需求扩展它(它是用.NET开发的)。 / p>

答案 7 :(得分:1)

就像其他人说的那样,你想要一个持续集成的服务器(CruiseControl,CruiseControl.Net,Hudson等)。虽然您可以使用构建脚本并提交钩子来执行您所描述的功能,但最终您会发现您重新发明了轮子(Continuous Integration Server)。没有必要,为此目的提供免费的解决方案。

该过程与您上面描述的有些不同。 构建服务器将:

  1. 检测新提交
  2. 查看您的源代码
  3. 运行构建脚本
  4. 成功构建时标记
  5. 提交会触发流程并创建标记,而不是触发流程的标记。服务器执行此操作我监视svn存储库而不是提交挂钩。

    查看CruiseControl.Net关于此主题的文档,特别是选项tagOnSuccess和tagBaseUrl。 Hudson和CruiseControl应该有类似的选择。

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