VisualSVN + TeamCity + Nant + Sql Server = 一个非常好的 CI 解决方案

来源:互联网 发布:闻香识女人 知乎 编辑:程序博客网 时间:2024/06/03 23:47

转自:http://www.acceptedeclectic.com/2008/05/visualsvn-teamcity-nant-sql-server.html

当你是一个全职程序员时,你的代码库是商业资源中很大的一部分,这对你来说是机会。

你不应该仅仅只是不断地写代码,完善代码,让他更干净,更新它的版本并保证质量。

你同样应该有能力去非常方便地部署和发布你的代码库,这种部署和发布的环境应该是干净并可信赖的自动方式,并尽量减少人为的错误风险。同时,也能在一瞬间去部署更新后合格的release结果/安装包/网站。

很难去反对这些观点,但是有时只是好像你绝不会有时间去做一件正确的事情。

在经过一些实验后,我已经建立起了一套便宜地立体式CI系统。它具有很好的适应性,销售也不错,同时你也只需要花2天的时间从0开始构造这套立体式服务。

**可能要机械地花1个小时,但是2天的实际训练要学习曲线和不曾遇到过的困难。

工具

SCM(Software Configuration Management):VisualSVN Server

Subversion可能不是完美的SCM,除了麻烦地整合,它确实是一个广泛流行的标准,并且能很完美地处理分布式决策。VisualSVN Server是一个直接套用在Windows环境上的一个版本。它集合的Windows集成授权,并且你能针对Windows用户和组对代码库或者其子库授予只读/读写权限。所需的Http服务在程序启动时将自动启动。它们的Visual Studio插件能整合在VS 2005VS2008中,并让二者在一起完美无瑕地工作。尽管有免费的VS集成包替代品,你也不要成为一个吝啬鬼,花费50美金买一个VS插件是不会让你后悔的。

CI: JetBrains TeamCity

花费:对20个独立的构建项目,20个用户,3个独立的代理(agent)过程免费免费(一个很慷慨的数字)。

然而实事是CruiseControl.Net或者CI工厂给了你需要CI的所有事情,这些选择看起来就像编码的噩梦,这个噩梦不断提醒着那些重编译Linux内核的程序员。不仅如此,除此之外,Teamcity还有如下的构建特性,例如分布式构建农场代理,报表, 还有与微软匹敌的Microsoft Team Foundation Server特性集合。Teamcity紧密集成了Subversion并且让你能表现出“延迟提交”,就像运行在一个基于没有任何代码提交的虚拟服务器。(这也就等效于在TFS上“提升”一个构建)。Teamcity是一个跨平台的构建服务器,它能在java/rails/AIR,或其他非.net代码库的管理上表现得很好。(作者注:其实.net代码库也能管理得很好)

构建行为脚本系统:NAntNantContrib

花费:免费,小型学习曲线,不要害怕,只要学习它。AntNant都是为构建和发布代码而开发的工具,它基于强大的xml脚本语言。如果你不知道Nant,不要为写代码挠头,集中精力花23个小时学习它是怎样工作的,你就会准备开始你自己写代码了。一个健壮的nant代码在本地和服务器发布都能产生同样的效果,这个FAQ向你展示怎样智能化地添加Nant代码到Visual Studio editor,从而帮助你开始学习和使用。

构建数据库服务器:SQL Server

花费:如果你已经在阅读这个,这些机会(代码库是机会,见第一段)你已经有一个了。Teamcity依赖于一个数据库。在盒子之外,它使用的是基于文件

的数据库,当然对于长期的稳定性来说,这是不推荐的。JetBrains推荐你将服务器移植到MySql数据库上,但是,对于我们这些具有探索和坚定信念,一切为了加固我们资源的人来说,一个更好的试验性方案是支持SQL SERVER 2005.我会向你展示如何做到这些。

**我向你展示的这些东西都已经将所有的事情无缝地整合进我的工作中。

目标:

   

       基本上,不同角色和平台的开发者(web设计师,QAs,架构师)能通过http方式向VisualSVN Server更新和提交(Update/Commit),而VisualSVN的管理和安全性则是“构建主管”角色负责。“构建主管”提供 // 权限给Windows/AD 用户和组。

当改变提交到SVN库,Teamcity将构建一个触发行为。一个特定的行为能够被触发依赖于以下因素,例如:

 

l        代码树中修改文件的位置

l        何人提交了修改。

 

在构建期间,一个构建代理会创建一个新的并且空的临时文件夹,签出最新版本的文件到该文件夹,然后执行一组待执行的构建,Teamcity提供一些基本的编译构建工厂(pre-fab build actions),例如:

l        SLN2005/2007: 构建一个完整的解决方案(solution),运行NUnit测试项目,并且报告构建/单元测试的结果。

l        重复寻找:报告代码库中所有重复的代码。

有一些很好的入门例子,但是好像更好的选择是触发你自定义的NAnt代码,这些自定义的代码包括:

l        你有构建正常管理代码控制的版本信息。

l        你能在本地运行一个自定义的构建代码而不用在Visual Studio 中运行一个标准的 Ctrl + Shift + B(此处应该说是在NAnt中运行不需要开启VS编译)

l        很容易就配置一个构建代理,让该代理在代码树中运行一个脚本。

所以,如果这个设计听起来不错的话,我们开始让这个美梦成真吧,下面是实现的步骤。

 

 

0.首当其冲:确定哪些机器处理哪些项目,并确保他们通讯正常(也许所有的资源都运行在同一个服务器上)。做一个你想要构建的列表,并且确定它们什么时候需要运行。做一个你要部署的目标服务器列表,它们的目标目录,如何、何时发布这些部署。创建一个能够控制所有构建代理服务的Windows用户,并确保这个用户对部署目标机器有写权限。花更多的时间在步骤0(也就是该步骤),后期的系统实现就越简单。

 

1.安装和配置VisualSVN 服务器。这是几乎都不算显而易见的问题,对任何参与代码工作的人来说,Visual SVN都是要随时可以访问的,因此,在服务器上安装它,以至于你能够通过Http,或者至少通过一个安全的端口来访问。一个好的资料库设计是每个解决方案(Solution)都创建一个库。

 

2.导入你的代码库到资料库。在本地“签出”你新建空代码库的副本,粘贴你的代码库到trunk文件夹,并且提交你刚刚签出的部分。不要添加自动产生的文件(dllresharper temp文件,bin/obj文件夹)到代码资料库。有很多的文章关于怎么开始设置Subversion,这里有一篇管理怎么开始使用Visual SVN。一旦你的代码库已经提交到资料库,你就能设置对源代码树(Source tree)的用户权限了。

To be continued....

原创粉丝点击