我一直在使用 Jenkins 和 psake,它运行良好。老实说 psake 完成了大部分工作,Jenkins 只是简单地拉下源代码,然后调用我的 psake 脚本,但正如 Nick Nieslanik 所说,如果你愿意,你可以很容易地让 Jenkins 直接调用 MSBuild/NUnit/etc。
詹金斯
通过仔细阅读 StackOverflow 上的 Jenkins 与 CruiseControl(.NET) 线程,普遍的共识似乎是选择 Jenkins。没有真正尝试过 CruiseControl 我不能保证这一点,但我会说 Jenkins 非常好。我发现 Jenkins 很容易设置。我快速浏览了一下 CruiseControl.NET,发现 Jenkins 更容易上手。我根本没有看过 TeamCity,所以无法谈论它。
Jenkins 有一个很好的插件系统和很多插件,包括一个用于 Powershell 的插件,它可以很容易地调用 psake 脚本。
帕萨克
到目前为止,我认为psake很棒。它基于 rake 语法,但比 rake 更原生于 Windows。由于它位于 powershell 之上,因此您可以利用它附带的许多方便的 Windows 管理功能。例如,有关
直接从您的 psake 任务设置和拆除 IIS 应用程序池和站点的一个很好的示例,请参阅这篇文章。我认为这很好,但我不确定您将如何在 MSBuild、Nant 或 rake 中执行此操作。基本的文件系统操作也是它的生计——似乎比使用一堆尖括号只是为了在某处复制一些文件要好。
至于 MSBuild 和 Nant,我认为它们都非常强大,但是为这种事情编辑 XML 文件感觉很痛苦。Powershell 是一种具有深度 Windows 集成的适当脚本语言。psake 是一个用于构建和其他任务的 DSL。这是一个很好的组合。
也就是说,对于实际构建,我只是将其从 psake 中移出到 msbuild 并在我想要构建的解决方案/项目文件上调用它。psake 有一个内置命令,用于调用 msbuild 并指定要使用的版本等。(说实话,到目前为止,最痛苦的是 msbuild 对在 Visual Studio 中构建得很好的解决方案文件感到厌烦。)
当您使用 RavenDB 时,您可能想知道他们正在使用 psake 来构建 RavenDB (和Rhino-ESB)。
一般而言,有关一些好的 psake 技巧,请参阅这篇文章。
长话短说,我个人推荐 Jenkins 和 psake。该组合将与 git、msbuild、NUnit、IIS 甚至可能是 Windows 服务很好地集成。