使用SVN自动构建分支

使用SVN自动构建分支,svn,continuous-integration,build-automation,cruisecontrol.net,nant,Svn,Continuous Integration,Build Automation,Cruisecontrol.net,Nant,我希望做的是在一个存储库中为我的所有分支提供CI和自动构建。我希望这些web应用的每个构建都有自己的项目,并作为虚拟目录(或等效目录)放置在分支网站上。如果能够创建一个新分支,并让它自动启动持续集成和构建过程,这将是一件非常棒的事情。在IIS中添加一个新的虚拟目录不是什么大不了的事,如果其余的都放在适当的位置上,我可以这样做 例如: 目前,我正在使用SVN、Nant和CruiseControl.Net,但如果情况需要,我会打开另一个持续集成服务器或构建脚本。我不理解真正的问题。不管怎样,我建

我希望做的是在一个存储库中为我的所有分支提供CI和自动构建。我希望这些web应用的每个构建都有自己的项目,并作为虚拟目录(或等效目录)放置在分支网站上。如果能够创建一个新分支,并让它自动启动持续集成和构建过程,这将是一件非常棒的事情。在IIS中添加一个新的虚拟目录不是什么大不了的事,如果其余的都放在适当的位置上,我可以这样做

例如:


目前,我正在使用SVN、Nant和CruiseControl.Net,但如果情况需要,我会打开另一个持续集成服务器或构建脚本。

我不理解真正的问题。不管怎样,我建议你去哈德逊()

它很容易使用。 很容易配置XML文件。
它有远程API。

我不认为您想要的是基于分支的连续集成项目的自动设置。但是,如果您的分支非常标准,并且没有急剧变化,那么编写powershell脚本(或您喜欢的任何脚本语言)来设置新项目将非常容易


不过,我质疑这种需求,当我们在CC.NET中分支时,复制trunks项目并搜索和替换所需字段只需不到一分钟的时间。我们遇到问题的唯一时间是在构建过程中使用自定义脚本时,如果这些脚本存在,我们也需要修改这些脚本,但任何持续集成系统都会出现这种情况。

这是可以做到的,但很多都取决于您的构建脚本。如果您让cc.net监视顶级svn文件夹,例如让您的项目监视器:

而不是。如果在中看到任何更改,将启动构建

现在,由您的构建脚本来确定哪些源已过时,或者是否有新的分支要构建。构建脚本将为任何新分支创建新的VDir

另一个选择是拥有一个cc.net项目,该项目的设计目的只是向您的cc.net添加新项目。(称之为BranchBuilder项目)我将利用cc.net中的预处理器,并有一个顶级的.config文件,其中只包括主干和每个分支的项目。分支生成器项目将监视svn上的根路径。如果它看到了任何变化,它将查看自上次构建以来是否有任何新的分支。如果有,它可以为该分支创建一个ccnet-branchname.config文件,创建vdir,然后使用额外的include更新ccnet.config根文件


更新ccnet配置后,cc.net将识别已修改的配置文件,并重新加载配置以添加新的分支项目。该分支项目将开始运行并构建您的新分支。

我不确定是否理解这个问题-您是否希望在分支代码时自动创建新的CC.net项目?-还是建立ccnet以建立多个分支机构的最佳方式——你提到虚拟目录——我们是在讨论web应用程序吗?对这两个问题都是肯定的,我对这个问题进行了编辑,以便更清楚(希望是!)+1。(然而,要注意:如果你在多个平台上构建,Hudson在每个平台完成之前不会继续下一个构建。这意味着最慢的构建/测试机器会让其他所有人都慢下来。至少,去年我们尝试过它时就是这样。)你确定吗?对于平台,你是说哈德逊的工作?因为您可以设置多个“构建执行器”。我从未使用过它,但Hudson支持“主/从”模式来分发构建。@ungarida:Hudson是我们评估过的最有前途的CI工具之一,因此我们放弃了它。但我甚至不记得什么是哈德逊的“工作”,所以我猜这意味着,不,我不确定。+1哈德逊-这就是我们如何做每个分支的CI(每个功能做分支)。为每次迭代设置我们所有的新分支和CI大约需要5分钟。在我看来,这是一个非常糟糕的主意。我觉得你太自动化了。与此解决方案相比,在ccnet.config文件中添加一个块可能会有多大的麻烦?我们也是手工操作的。仅仅因为你能做一件事,并不意味着你应该做。但是,它将执行OP要求的自动构建分支功能。也就是说,我不知道他们多久分支一次。一天可能有几十次。计算机被设计用来做重复性的任务,对吗?@JoshKodroff我认为这是一个观点,“昂贵的”分支是很多开发都集中在一行的原因(增加了风险)。必须登录到一台机器来重新配置构建过程似乎会给分支增加大量成本。@AndrewTheken在这一点上,任何SVN问题的答案都应该是“切换到git”。@JoshKodroff——正如我所同意的,在大型组织中,有很多机制可以防止这种情况,因此,任何可以使SVN的功能分支更容易的事情都应该做。