.NET产品组合的自动构建平台-最佳选择?[关闭]


10

我参与维护相当大的.NET应用程序组合。该产品组合中还包括基于其他平台(本机C ++,ECLIPS Forms等)构建的旧应用程序。

我现在在NAnt上有一个复杂的构建框架,该框架管理所有这些应用程序的构建。构建框架使用NAnt做许多不同的事情:

  • 从Subversion中提取代码,并在Subversion中创建标签
  • 使用MSBuild for .NET或其他平台的编译器生成代码
  • 窥探AssemblyInfo文件以增加版本号
  • 删除某些不应包含在构建/发行版中的文件
  • 将代码发布到部署文件夹
  • 压缩代码以进行备份
  • 部署Windows服务;启动和停止它们
  • 等等。

其中大多数事情都可以单独使用NAnt来完成,但是我们确实为NAnt构建了一些扩展任务,以完成某些特定于我们环境的事情。同样,上述大多数过程在我们许多不同的应用程序构建脚本中都得到了通用和重用,因此我们不再重复逻辑。因此,它不是简单的NAnt代码,也不是简单的构建脚本。有数十个NAnt文件一起执行构建。

最近,由于以下几个原因,我对NAnt感到不满意:(1)它的语法太糟糕了-XML之上的编程语言真的很难维护;(2)该项目似乎已经死了;最近没有大量更新,似乎没有人真正掌舵。由于缺乏活动,尝试使其与.NET 4配合使用已引起一些痛苦。

因此,在没有所有这些背景的情况下,这是我的问题。鉴于我希望根据上面的列表完成一些工作,并且鉴于我主要是在.NET商店中,但我还需要构建非.NET项目,是否有我应该考虑的NAnt替代品切换到?

我所关注的东西包括Powershell(带有或不带有psake),MSBuild本身以及rake。这些都有优点和缺点。例如,MSBuild是否足够强大?我记得几年前使用过它,它似乎没有NAnt那样强大。我是否真的想让我的团队学习Ruby,以便使用rake进行构建?psake是否真的足够成熟,可以将我的投资组合固定在项目上?Powershell是否“太接近金属了”,而我最终不得不编写自己的类似于sake的构建库才能单独使用它?

还有其他我应该考虑的工具吗?如果您参与维护非常复杂的.NET产品组合,那么您将要使用哪种构建工具?您的团队目前使用什么?

Answers:


2

如果您已经在使用TeamCity,则应该能够将其现有功能用于大多数需求。它本身支持构建Visual Studio .sln文件,如果您需要对所有项目进行额外的处理,则可以在构建计算机上修改.NET Framework的.targets文件,因此不必更改单个的csproj文件。

它会自动从Subversion的zip工件中检出,允许您控制哪些文件被视为可部署的工件。新版本(6.0)还允许多个构建步骤,因此有机会将工件的xcopy部署到共享。

您还可以编写自己的应用程序/任务,这些应用程序/任务可以作为构建的一部分运行(通过命令行运行程序),并可以做您想做的任何事情(例如启动/停止Windows进程)。


3

我们将事物视为三种不同的活动,即构建,部署和安装。我们将TFS用于构建服务器,并附带一些Powershell标注。然后,我们使用Powershell完成相当复杂的跨多个本地和云服务器的所有Deploy和Install部分。我对通过MSBuild或其他工具学习Powershell感到非常满意。过去,我在Visual Build方面也有丰富的经验。


2

一起查看hudson和MSBuild。强大的功能来自MSBuild的强大功能和hudson的插件

例如,您可以使用hudson并运行NAnt脚本,直到迁移到MSBuild,然后它也可以运行MSBuild脚本。

具体解决您的观点:

  • 颠覆标记
  • MSBuild
  • 在SO上要求查看AssemblyInfo ,但是解决方案可能不符合您的喜好
  • MSBuild可以轻松删除文件
  • “将代码释放到部署文件夹”-您可以让构建系统跳过该步骤,并使用多种方法自动部署它。或者,您可以根据需要使用FTP
  • MSBuild 可以压缩
  • Windows服务的,再次的MSBuild是你的朋友在这里。

感谢您有关MSBuild的信息。似乎那里的电源比我上次尝试使用的电源更多。关于Hudson,这是否能提供我们目前使用的其他CI服务器(例如TeamCity)以外的优势?我试图避免在这里破坏太多的现状,并且在替换构建脚本的同时替换CI服务器似乎更加痛苦。
RationalGeek

以我的拙见,我认为TeamCity很棒……而hudson更好。可以看到它们执行相同的功能,直到您想做点很棒的事情-哈德逊才获胜。老实说,哈德森可以分析(stylecop / fxcop)->构建->测试->标签->本地和异地备份->部署,同时通过RSS,SMS,XFD保持最新。
史蒂文·埃弗斯

嗯... TeamCity不可能在列表中找到任何东西,但是哈德森也许更容易。无论哪种方式,除非我们使用TC遇到一些痛点,否则我认为我们不会在短期内切换。
RationalGeek

@jkohlhepp:困难之处在于同一空间中有许多解决方案。归根结底,哈德逊简单,而且100%免费。IIRC,TC在哈德森上可能拥有的一件事是多主体构建。
史蒂文·埃弗斯

2

我使用自动Build Studio。我想摆脱它。

我不转换为100%MS BuildTeam Foundation Build的唯一原因是重建今天完美运行的脚本所涉及的成本。脚本变化不大...

但是,对于下一个产品,这将是Team Foundation Build,它会毫不犹豫地出于以下主要原因(还有更多原因):

  • 易于部署(最新版本:2010)
  • 它与Visual StudioTeam Foundation Server完全集成
  • 它正在成为MS Build之类的标准
  • Bizspark是免费的(对于初创公司而言)

由于您同时也在.NET中,因此我强烈建议您使用TFB。

如果您不能申请Bizspark或无力购买许可证,则可以使用CruiseControl.NET + MS Build和少量支持脚本。在我工作的一家大型公用事业公司中,我们使用CruiseControl.NET来构建,测试,部署和报告我们的所有项目。它包括自动Web服务部署。


我没有考虑过这个选项,但是我认为这对我们来说不是一个现实的选择,因为我们根本不使用TFS,并且在过去(出于预算和其他原因)已经否决了使用TFS的尝试。但是,感谢您的建议,这是一个有趣的想法。
RationalGeek

不是那么宽泛。如果您的管理层对价格敏感,则MS Build将是完美的选择。我以前只使用MS Build + CruiseControl.NET,它的功能很棒!将在我的答案中添加。

@Pierre 303:出于好奇,您为什么要摆脱Automated Build Studio?
RationalGeek

@Pierre 303:TFS的花费不是唯一的问题。我的商店是一家大型企业的一部分,他们已经对Subversion和其他工具进行了标准化,并且“非标准”,并且使用TFS会引起政治问题。
RationalGeek

@jkohlhepp:它不容易使用,它与Visual Studio集成得不好(至少是我所拥有的版本),而且还远远不是一个标准。

2

FinalBuilder可以免费提供漂亮的GUI和生成器服务器应用程序,从而满足您所有要求的项目。


2

我目前正在使用MSBuild(> 3000行脚本)来做您正在做的事情(即从构建到打包再到部署)。CI正在使用CruiseControl.Net,希望我将来可以迁移到TeamBuild。MSBuild很麻烦(使用XML编程),但是它非常强大,特别是批处理和依赖项跟踪。它在新的.Net版本中得到了积极的维护和改进,并且是Visual Studio和TFS中构建系统的基础。Visual Studio项目文件实际上也是MSBuild项目,我可以加入各种扩展点。该MSBuild扩展包还有许多其他任务,并且以编程方式创建自己的任务非常容易。我建议认真考虑一下MSBuild。最近,我也在学习Powershell,并发现某些任务尤其在部署阶段特别容易,例如安装和配置证书,IIS等。

在Visual Studio中编辑MSBuild项目,因为它了解语法并为您提供了智能感知。这里还有一些其他有用的实用程序将对MSBuild有所帮助。
MSBuild启动板 -用于外壳扩展
MSBuild SideKicks-图形化编辑,执行和调试脚本。


1

也许您会问太多的构建脚本而没有足够的构建服务器-使用team city,您可以轻松地使用简单的脚本来完成每个项目符号,无论使用哪种语言或堆栈,只要有意义,并使用TeamCity构建任务即可将事物适当地链接在一起。


似乎大多数这些答案都将CI与构建脚本等同起来。我一直认为构建脚本是明智的选择,而CI服务器则是可以根据触发器启动构建的东西。但是也许您是对的,我确实需要重新考虑一下。
RationalGeek

1

我强烈推荐TeamCity,它很容易配置和设置。MSBuild比NAnt更可取,原因很简单,因为vs2008 / 2010中的所有项目/解决方案文件在技术上都是MSBuild文件,但是您可以使用MSBuild或NAnt配置TeamCity。

OfCourse,TeamCity将花费您。我个人选择了rake,因为psake也是不错的选择,这是因为与Ruby工具相比,与其他工具相比存在摩擦。


1
如果您的构建配置少于20个且用户少于20个,则FYI TeamCity是免费的。另外,如果您是开源项目,则可以向他们申请免费的无限制许可证。
RationalGeek

0

您考虑过哈德森吗?这可能有点麻烦,因为它需要运行Java应用服务器,但是我认为它可以让您使用当前的NAnt脚本,并使用其他工具在该脚本的基础上进行构建。


Hudson更像是一个持续集成平台,而不是一个构建平台。我们确实有一个CI服务器-TeamCity,它可以与NAnt正常工作。但是,我要替换NAnt的原因是因为维护NAnt脚本很麻烦。通过Hudson使用当前脚本无法解决此问题。还是)感谢你的建议。
RationalGeek

恕我直言,哈德森在VS项目中的功能非常有限。签出并不与您期望的变更集相关,在幕后它除了运行通过Web界面和大量插件创建的批处理文件外无所作为。如果您能使其正常运行,则进行报告非常好。
比尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.