.NET项目使用NAnt / MSBuild + SVN构建自动化

时间:2009-02-09 22:12:03

标签: .net svn msbuild build-automation nant

现在已经有一段时间了,我一直试图弄清楚如何在我们的商店设置自动构建过程。我已经阅读了很多关于这个问题的帖子和指南,但没有一个真正适合我的具体需求。

我的SVN存储库布局如下

\projects
   \projectA (a product)
       \tags
           \1.0.0.1
           \1.0.0.2
           ...
       \trunk
           \src
              \proj1  (a VS C# project)
              \proj2
           \documentation

然后我有一个网络共享,每个项目(产品)都有一个文件夹,后者又包含二进制文件,书面文档和生成的API文档(通过NDoc - 每个项目可能在存储库中有一个.ndoc文件) 每个历史版本(来自标记 SVN文件夹)和最新版本(来自 trunk )。

基本上,我想在计划的批量构建中做的是这些步骤:

  1. 检查项目的SVN文件夹,并识别网络共享中不存在的标记
  2. 代表每个代码
    1. 查看标签文件夹
    2. 构建(使用发布配置)
    3. 将生成的二进制文件复制到网络共享
    4. 搜索.ndoc文件
    5. 通过NDoc生成CHM文件
    6. 将生成的CHM文件复制到网络共享
  3. 与2.中的相同,但是对于 trunk
  4. 的HEAD修订版

    现在,麻烦的是,我不知道从哪里开始。我没有将.sln文件保存在存储库中,但我可以用MSBuild文件替换它们,而MSBuild文件又构建了属于特定产品的C#项目。

    我想最令人不安的部分是检查尚未处理的标签的存储库 - 即搜索标签并将它们与网络共享上的项目目录结构进行比较。我不知道如何在任何构建工具(NAnt,MSBuild)中执行此操作。

    您能否向我提供一些关于如何整体和详细地处理此任务的指示?我不在乎我是否使用NAnt,MSBuild或两者兼而有之。我知道这可能相当复杂,但每个想法和NAnt / MSBuild片段都会有很大的帮助。

    提前致谢。

3 个答案:

答案 0 :(得分:2)

在NantContrib中,您可以使用SVN命令获取信息。您可以从SVN命令行运行的任何查询都可以使用,然后解析结果。因此,您可以执行标记搜索,将标记与网络共享上的文件夹匹配,然后使用svn-checkout命令对任何缺少的标记执行检查。完成后,为每个项目文件夹触发msbuild命令。

如果您想要自动构建,另一种方法是创建分支而不是标记,因为它看起来像是创建版本而不是标记。如果您创建一个分支,您可以拥有一个自动构建工具,如CruiseControl.net或TeamCity monitory您的存储库。然后,如果在分支或主干上签入文件,您可以启动自动构建。

在两者之间你应该能够处理它。如果您想要一些构建脚本的好例子,这些脚本中包含了文档(包含zip和分发内容),请在此处查看Castle项目:http://www.castleproject.org/

他们甚至使用一些SVN命令来获取修订号以及不自动生成assymbly信息文件的内容。

答案 1 :(得分:1)

UppercuT可能是检查NAnt代码段的绝佳资源。

http://projectuppercut.org/

这里有一些很好的解释:UppercuT

答案 2 :(得分:0)

您是否可以让NAnt或MSBuild调用perl或其他脚本语言脚本来检查svn存储库并执行检出?如果你可以从命令行运行构建,那么听起来其他一切只是更多的脚本。