【问题标题】:Build or Rebuild on the build server (CI server)在构建服务器(CI 服务器)上构建或重建
【发布时间】:2012-01-03 20:23:35
【问题描述】:

我正在运行 TeamCity 来构建一个 .NET 项目(更准确地说是几个项目)。

我应该使用重建目标还是构建目标?

我想尽量减少构建时间,同时不生成任何未更改的新版本项目。

使用“构建”目标是否安全?如果以前的项目输出被删除了怎么办?我如何验证我可以安全地执行此操作?

【问题讨论】:

    标签: c# .net build continuous-integration teamcity


    【解决方案1】:

    如果您需要重建所有项目,您应该使用 rebuild,例如为了获得一致的时间戳或版本号(尽管通常,链接的 AssemblyInfo.cs 中的更改将触发构建也是。)

    即使先前构建的构建输出消失了,或者即使构建碰巧在没有构建输出的新构建代理上完成,构建也是完全安全的。在这种情况下,将构建所有必要的项目。

    但是,您的 sln/csproj 文件中可能有依赖于(重新)构建的自定义 MSBuild 步骤,在这种情况下,您需要更加小心,但除此之外,如果您愿意,请选择构建。

    【讨论】:

    • 如果 prev build 的项目输出消失了,我将生成更新版本的程序集,即使没有更改源代码。这是我试图阻止的场景跨度>
    • 然后必须重建项目输出,Build 会这样做。如果您想避免在删除构建输出后从旧源文件生成新文件,那么您必须在其他地方处理。您不能要求 Visual Studio 或 MSBuild 构建项目 B,它依赖于项目 A,而 要么 之前的构建输出已经在磁盘上项目 A 的构建。它需要来自 A 的文件。
    【解决方案2】:

    您应该始终在持续集成服务器上执行rebuild 操作。

    与您可能读到的相反,有可能从以前的构建泄漏到当前构建中。泄漏几乎绝不是由于无法将源代码编译为二进制文件的结果,但取决于您用于执行构建的工具,可能会有非代码文件不会被复制,因为它们已经存在于输出目录,或已删除的未从中删除的文件。

    出于类似的原因,如果您能承受执行时间的成本,您还应该始终在构建之前清理源代码树。要么销毁它并检查一个干净的副本,要么还原任何更改并删除任何不受源代码控制的文件。如果您不是在每个构建中都这样做,至少在“空闲时间”构建(例如,夜间或周末构建)以及您打算实际交付给客户或部署的构建上执行投入生产(最好投入质量保证)。

    【讨论】:

      【解决方案3】:

      Build 生成运行项目所需的一切,保持未更改的程序集。 Rebuild 强制对所涉及的任何程序集进行完整构建。除非在特定情况下(版本号、依赖于某些东西的进程),否则使用构建来减少花费的时间是安全的。

      【讨论】:

        【解决方案4】:

        您应该使用 Build 逐步构建您的项目。这是完全安全的。

        【讨论】:

          猜你喜欢
          • 2016-06-09
          • 1970-01-01
          • 2017-03-25
          • 2011-02-13
          • 1970-01-01
          • 2013-10-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多