CCNET+MSBuild+SVN实时构建的优化总结2011-07-24 博客园 CoderZh本文不是介绍如何使用CCNET+MSBuild+SVN构建自动编译系统,相关的内容可以从很多地方获取,可以 再园子里搜一下。随着我们的SVN库日益壮大,容量达到10G,几十G 甚至更大时,我们发现自动构建速度越来越慢,直到 有一天你发现入了很小一段代码却不得不等待几小时构建完成,程序员的忍受是有极限的,因此我们决定 采取措施实施优化。首先,我们必须分析哪些因素导致了我们构建速度的减慢,罗列一下,大概如下几个方面:1. SVN库太大,使得构建服务器在更新SVN代码时花费大量时间。2. SVN库里有很多工程,每当有SVN代码更新的时候,CCNET就会调用MSBuild将我们所有的工程都编译 一遍。(即使入库的文件根本不需要编译,如python脚本)3. SVN库中工程量越来越大,导致编译所有工程时间原来越长。对于第三点,我们没有办法,但对于前两点,我们是有办法解决的,总结一下要做的事情:一是加快 SVN更新速度,二是减少不必要的工程编译次数。一、加快SVN更新速度SVN的更新操作是有CCNET发起的,服务每隔一段时间查询一次SVN是否更新(看CCNET源码好像是调用 svn --log来获取代码更新信息),如果有文件更新,则调用svn --update进行更新。从CCNET源码看来, CCNET对SVN代码的更新应该是针对性的,即,查询到哪部分代码有更新,就只更新那部分代码。这样的话 效率应该不差。但在实际过程中,发现CCNET调用SVN更新速度异常的慢,甚至让我怀疑它是对整个SVN库 执行了一次update操作。要加快SVN更新速度,我们想到的是减少SVN更新的文件范围,假如你入库了一个python代码,或是QTP 测试案例,因为无需编译,所以构建服务器甚至不需要更新那部分代码。因此,我们可以在CCNET的配置 文件中只配置我们需要编译的工程:
<sourcecontrol type="multi"><sourceControls><svn><trunkUrl>http://xxx/projectA</trunkUrl><workingDirectory>x:ccnetsvnprojctA</workingDirectory><username>name</username><password>pwd</password><executable>x:ccnetSubversionsvn.exe</executable></svn><svn><trunkUrl>http://xxx/projectB</trunkUrl><workingDirectory>x:ccnetsvnprojctB</workingDirectory><username>name</username><password>pwd</password><executable>x:ccnetSubversionsvn.exe</executable></svn><svn><trunkUrl>http://xxx/projectC</trunkUrl><workingDirectory>x:ccnetsvnprojctC</workingDirectory><username>name</username><password>pwd</password><executable>x:ccnetSubversionsvn.exe</executable></svn></sourceControls></sourcecontrol>
通过上面的设置,CCNET就是监视我们上面指定的SVN路径的代码更新了,如果你的SVN库中有大量不需 要编译的文件,这样的优化带来的效果是巨大的。