2011-11-22 211 views
4

我正在运行TeamCity来构建一个.NET项目(更确切地说有几个项目)。构建服务器(CI服务器)上的构建或重建

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

我想尽量减少建造时间,而不是生产尚未更改的项目,任何新版本。

这是使用“构建”目标的安全实践吗?如果以前的项目产出被抹去了怎么办?我如何确认我可以安全地做到这一点?

回答

6

您应该使用重建如果你需要重建所有项目,例如为了得到一致的时间戳或版本号(尽管通常,在链接的AssemblyInfo.cs的变化将触发一个构建为好。)

构建是完全安全的,即使从先前的构建输出的生成消失了,或者即使建立恰巧是在其没有构建输出一个新的构建代理完成。在这种情况下,所有必要的项目都将建成。

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

+0

如果从什么上一页构建输出项目走了,我会产生组件的更新版本,即使没有源代码被改变。这是我试图阻止 –

+1

然后该项目产出将有方案要重建,Build会做到这一点。如果您希望避免在构建输出被移除时从旧源文件生成新文件,那么您必须在其他位置处理这些问题。 *不能*要求Visual Studio或MSBuild构建项目B,并且依赖于项目A,而不是*以前的构建输出已经存在于磁盘上*或者也构建项目A.它需要A的文件。 –

1

构建产生运行该项目所需的一切,保持未更改的程序集。重建强制所有组件的完整构建。除非特定情况(版本号,对某事的依赖过程),否则使用构建来缩短所花费的时间是安全的。

1

您应该使用Build以增量方式构建您的项目。这是完全安全的。

2

您应该总是在连续集成服务器上执行rebuild操作。

相反,你可以读什么,有可能从先前构建漏到当前一个。漏洞几乎永远不会是源代码编译为二进制文件的结果,但根据您用于执行构建的工具,可能有非代码文件不会被复制,因为它们已经存在于输出目录或删除的文件,而这些文件不会从中删除。

出于类似的原因,如果你能负担得起的执行时间成本,你也应该总是在构建之前清理源代码树。要么销毁它并检出干净的副本,要么恢复任何更改并删除任何不受源代码管理的文件。如果你不这样做,在每次构建,至少做到这一点的“空闲时间”构建(,晚上或周末构建),并在建立你打算实际交付给客户或部署到生产(理想进入质量保证)。