我有一个 .net 应用程序,它有一个 MVC3 前端和 2 个 Windows 服务。
这一切都取决于 2 个 RavenDB 安装,它们可以作为 Windows 服务或 IIS 运行——我不在乎这里。
服务是使用 TopShelf 构建的,测试是直接使用 NUnint 完成的。我使用 Github 作为我的存储库。
理想情况下,在每次成功的“发布”构建时,我都希望构建、测试、删除目录和 RavenDb 数据目录,然后部署(Web 和服务),然后启动进程以在控制台应用程序上运行完成我是可以在默认数据集中运行的构建。
您将如何管理此处的部署?我还没有 CI 服务器。我有一个全新的服务器,我可以随心所欲地使用它。好久没做CI/CD了,怀疑武器变了。
我应该查看 MSBuild/NAnt 吗?拜托,雷克?队城?
您将如何管理后期构建流程?
最佳答案
我一直在将 Jenkins 与 psake 结合使用,它运行良好。老实说,大部分工作都是由 psake 完成的,Jenkins 只需拉下源代码,然后调用我的 psake 脚本,但正如 Nick Nieslanik 所说,如果您愿意,您可以轻松地让 Jenkins 直接调用 MSBuild/NUnit/etc。
Jenkins
通过仔细阅读 StackOverflow 上的 Jenkins 与 CruiseControl(.NET) 线程,普遍的共识似乎是选择 Jenkins。没有真正尝试过 CruiseControl 我不能保证这一点,但我会说 Jenkins 非常好。我发现 Jenkins 很容易设置。我快速浏览了 CruiseControl.NET,发现 Jenkins 更容易上手。我根本没看过 TeamCity,所以不能说。
- CI: Hudson with .Net vs CruiseControl.Net
- What is the difference between Hudson and CruiseControl for Java projects?
- How and why do I set up a C# build machine?
Jenkins 有一个很好的插件系统,还有很多插件,包括一个用于 Powershell 的插件,可以很容易地调用 psake 脚本。
普赛克
到目前为止,我认为 psake 很棒。它基于 rake 语法,但比 rake 更适合 Windows。由于它位于 powershell 之上,您可以利用它附带的许多方便的 Windows 管理功能。例如,参见 this post 有关直接从您的 psake 任务设置和拆除 IIS 应用程序池和站点的一个很好的示例。我认为这很好,但我不确定您将如何在 MSBuild、Nant 或 rake 中做到这一点。基本的文件系统操作也是面包和黄油——似乎比使用一堆尖括号只是为了在某处复制一些文件要好。
至于MSBuild和Nant,我认为它们都非常强大,但是为这种东西编辑XML文件感觉很痛苦。 Powershell 是一种与 Windows 深度集成的适当脚本语言。 psake 是一个 DSL,用于在此之上构建和执行其他任务。这是一个很好的组合。
也就是说,对于实际构建,我只是将其从 psake 中转移到 msbuild,然后在我想要构建的解决方案/项目文件上调用它。 psake 有一个内置命令,用于调用 msbuild 并指定要使用的版本等。(说实话,到目前为止最痛苦的是 msbuild 对在 Visual Studio 中构建得很好的解决方案文件感到厌烦。)
当您使用 RavenDB 时,您可能有兴趣知道他们正在为 building RavenDB 使用 psake (和 Rhino-ESB )。
有关一般的一些好的 psake 技巧,请参阅 this post .
长话短说,我个人推荐 Jenkins 和 psake。该组合将与 git、msbuild、NUnit、IIS 甚至可能与 Windows 服务很好地集成。
关于deployment - 您将如何部署此 .net 堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9590422/