每日构建(三)

    这前的两篇每日构建,写的简单了点,这里在之前的基础上做些改进,使得更加容易管理和配置。


    每日构建改进一:build文件的共享。

 

      在进行每日构建时,对于复制文件这部分功能我采用的是nant,nant最核心的部分是build文件,一般一个大型网站有时分好多个解决方案,例如酒店项目,机票项目等等,所以对应不同的解决方案会有不同的部署规则。而网站的部署往往不是一部到位,随着业务需求的变化,会产生不同的网站版本。但nant用的build文件应该是一样的,这里就需要build文件能够在不同的版本中共享。
 
      解决方案:nant的build文件支持外部属性。先贴一个build文件:先看看copy节点,它需要两个重要的参数:源文件夹目录,目的文件夹目录,build文件中如果copy节点过多,我们需要写相当多的路径,这里可以在build文件中定义一个property节点,它相当于C#中的属性。一方面可以在copy命令中用这个属性来代替实际路径,另一方面是为了在外部调用build文件时动态给属性值。

 

代码
<? xml version = " 1.0 "  encoding = " gb2312 "   ?>
< project name = " Deploy "   default = " run " >
    
< property name = " basename "  value = " WebSite " />
    
< property name = " debug "  value = " true " />
     
< property name = " base.dir "  value = " http://www.cnblogs.com/../版本一/src "   />
    
< property name = " deploy.dir "  value = " http://www.cnblogs.com/../deploy/web "   />
    
< property name = " FxCop.dir "  value = " http://www.cnblogs.com/../deploy "   />  
    
< target name = " clean " >
    
</ target >
    
< target name = " deploy "  depends = " clean " >  
   
 
< copy todir = " ${deploy.dir}/new/member " >
     
< fileset basedir = " ${base.dir}/member/ " >
        
< include name = " **/*.js "   />  
        
</ fileset >
 
</ copy >  
    
</ target >
    
< target name = " run "  depends = " fxcop " >
    
</ target >
    
< target name = " fxcop "  depends = " deploy " >     
    
</ target >  
</ project >

 

 

      svn与nant是如何合作的:同样贴出代码。和我上篇文章有区别的就在于增加了buildArgs参数,通过"-D"来连接想要重写的属性内容。多个属性中间用空格区分。当版本二进行每日构建时,只需要修改ccnet的project配置即可,原来的build文件不需要改动。

 

代码
< nant >
        
< executable > C:\min.jiang\bin\nant.exe </ executable >
        
< baseDirectory > C:\min.jiang\proj\EL_Online_V36_11.02_1215 </ baseDirectory >
        
< nologo > false </ nologo >
        
< buildFile > C:\min.jiang\bin\DeployScripts\Hotels\ default .build </ buildFile >
        
< targetList >
          
< target > run </ target >
        
</ targetList >
        
< buildArgs >- D:deploy.dir = C:\min.jiang\deploy\版本一\package\web  -

D:
base .dir = C:\min.jiang\proj\版本一\src </ buildArgs >
        
< buildTimeoutSeconds > 1200 </ buildTimeoutSeconds >
      
</ nant >

 

 

    每日构建改进二:部署包自动提交SVN。

 

        ccnet在部署包生成后,会存放在ccnet服务器上,其它的同事想要获取这个部署包,只能登录服务器,或者是从共享文件夹中获取,既然有了SVN,我们就可以把生成的部署后放进SVN。修改的deploy.bat如下:


shift
if exist  "C:\min.jiang\deploy\%0\package\Web_auto.rar" del /F C:\min.jiang\deploy\%0

\package\Web_auto.rar


      说明:这里先检测本地部署文件目录中是否有部署包,如果有先删除。


"C:\Program Files\WinRAR\rar.exe" A -r -ep1 -ed -ta%1 C:\min.jiang\deploy\%0

\package\Web_auto.rar -AD C:\min.jiang\deploy\%0\package\web


      说明:按时间来实现增量压缩(压缩包中只包含指定时间之后修改的文件)。


if not exist "C:\min.jiang\deploy\%0\Web_auto.rar" svn checkout http://svn/路径/web3.5/%0/

"C:\min.jiang\deploy\%0" --username aaa --password aaa


      说明:如果SVN部署目录中没有部署包,先从SVN上下载。


if exist "C:\min.jiang\deploy\%0\Web_auto.rar" svn revert "C:\min.jiang\deploy\%0\Web_auto.rar"


      说明:保证本地版本和SVN版本内容相同。


xcopy C:\min.jiang\deploy\%0\package\Web_auto.rar  C:\min.jiang\deploy\%0\ /y


      说明:把本地的部署包复制到SVN部署目录下。


svn commit -m "update new package"  C:\min.jiang\deploy\%0\Web_auto.rar


      说明:提交最终的部署包。

 

     上面的代码目前有一个缺陷,就是事先需要手动在SVN部署目录下面创建一个Web_auto.rar,然后提交SVN,我在调用svn add C:\min.jiang\deploy\%0\Web_auto.rar后,执行svn commit时,会提示文件不在SVN控制下。大家如果原因,请指教。

 

   每日构建改进三:设置ccnet网站。

  

       默认情况下,ccnet安装后会在默认网站下生成一个虚似目录,为了方便访问,我们可以建立一个站点,例如主机头定义为http://www.ccnetsite.com/,这样同事只需要把自己本机的host指向到ccnet服务器IP,以后生成部署包只需要打开http://www.ccnetsite.com/就可以进行管理。

 

    

你可能感兴趣的:(构建)