【问题标题】:Building a tagged project with CruiseControl.Net使用 CruiseControl.Net 构建标记项目
【发布时间】:2009-07-13 07:36:21
【问题描述】:

我的经理要求我为我们的项目设置构建自动化。我决定使用 CruiseControl.Net 作为我们的持续集成服务器,因为其他一些团队成员对它有一点经验,但我没有——这就是我很乐意承担这项任务的原因。

我们使用 Subversion 作为我们的存储库,最终目标是在每次标记项目时实例化构建。比如:

在 svn://svn/tags/ProjectX/ 中添加一个文件夹 比如 svn://svn/tags/ProjectX/JulyCheckPoint 应该将新添加的标签 (svn://svn/tags/ProjectX/JulyCheckPoint) 检出到本地目录 (D:\temp\tags\ProjectX\JulyCheckPoint) 并运行一个 nant 文件 (D:\temp\tags\ProjectX\七月检查点\nant.build)

我知道 CruiseControl 能够监视 svn://svn/tags/ProjectX/ 的更改,但我不确定如何将最新标签签出到构建服务器的本地磁盘并运行 nant.build如果我不知道最新标签的名称,请在其中。我做了一些谷歌搜索,并相信 svn post-commit hooks 可能是我应该研究的东西。

我希望所有这些都有意义,如果您需要更多详细信息/说明,请告诉我。任何指导/建议将不胜感激。

干杯。

【问题讨论】:

    标签: svn cruisecontrol.net nant tagging


    【解决方案1】:

    既然你知道如何监控 /svn/tags/ProjectX/ 的变化,你可以让它触发一个 nant 脚本。此脚本可以针对 svn 执行命令(请参阅http://nantcontrib.sourceforge.net/release/0.85/help/tasks/index.html 中的 svn 任务)以检查 /svn/tags/ProjectX/ 中的最新文件夹。从这里你可以使用这个 nant 脚本来使用 nant 任务调用已签出文件夹中的 nant 脚本。

    【讨论】:

      【解决方案2】:

      这不能回答你的问题,但我很好奇你为什么选择从标签而不是 HEAD 构建?

      每次对源代码存储库进行更改时,通常都会使用持续集成来构建项目代码,以便及早发现问题。

      我真的很喜欢 Martin Fowler 的 this article。当我开始使用持续集成时,它对我帮助很大。

      【讨论】:

      • 谢谢,我一定会看看那篇文章。我想到的下一步是在主干上实施夜间构建(出于您提到的目的)。最终,通过从标签构建,我希望为提交标签的构建经理/开发人员提供一个包含标签项目的 .msi 安装包(查看 WiX)。这样,我们达到的任何里程碑都可以通过简单地标记特定构建来构建到发布安装中。他们有什么我忽略的缺点吗?
      • 这听起来像是一个合理的要求,但它并不真正适合 CC.Net 的工作方式。在这种情况下,我建议创建第二个 CC.Net 项目,名为 release build,由管理员运行。此构建将创建 MSI,然后标记主干。如果需要对标记代码进行修改,您可以分支并创建一个新的 CC.Net 项目以从该分支构建。这是一个非常简单的概述,但希望能给您一些帮助您入门的想法。
      【解决方案3】:

      我认为您可以做到这一点的唯一方法是使用 svn:externals 我认为并设置一个指向您的标签的存储库。

      svn propget svn:externals blah
      

      然后对其进行结帐,例如 svn checkout http://svn/repos/blah

      在 CruiseControl.NET 中放置

      <checkExternals>True</checkExternals>
      <checkExternalsRecursive>True</checkExternalsRecursive>
      

      在该项目的配置中

      【讨论】:

        【解决方案4】:

        感谢所有帮助的家伙。我决定试一试acloutier的建议,并为每个项目制作静态nant文件,这些nant文件始终位于构建服务器上。

        CruiseControl.Net(构建服务器上的设置)监控每个项目的标签存储库并触发相应的静态 nant 文件。然后,这个 nant 文件运行一些 C# 代码,确定 svn://svn/tags/ProjectX/ 位置中最后添加的文件夹的名称。

        知道最后添加的文件夹的名称允许我将 svn://svn/tags/ProjectX/ 下最近标记的项目 svn-checkout 到本地位置并在项目中运行 nant 文件。

        如果有人需要任何代码 sn-ps 或说明,我很乐意在我开始工作时提供。感谢您的帮助!

        【讨论】:

        • 嗨,鲍里斯,你能解释一下或者向 sn-ps 展示你是如何做到这一点的吗?谢谢!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-07
        • 1970-01-01
        • 1970-01-01
        • 2011-03-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多