每日构建(四)

      前三篇文章,我使用ccnet+nant+svn+winrar实现了自动打包,这里的自动打包包含如下内容:
    
     1:自动从代码中获取源码;
     2:自动编译工程;
     3:利用nant生成web包;
     4:利用winrar实现增量包,并提交SVN,供其它同事获取。
   
     问题:上面生成的web包,我给它命名为web_auto.rar,做过网站的朋友一定都会知道,应用程序最后上线,都需要准备部署包。但这个web_auto并不用来当最终的部署包,我会再创建一个web.rar,然后把 web_auto的内容和web内容合并。看到这,有朋友就会问,既然有了web_auto包,为什么还需要创建一个web包呢?
   
    1:web内容有可能会比web_auto要多,例如有些配置文件等。
    2:有某些特殊原因,利用ccnet不太方便的文件。
    3:这点是最重要的,ccnet的触发器分几种,例如:
       1>:按时解发,即每天的某一时间。
       2>:隔多长时间解发。例如每隔两小时。
       3>:手工触发,管理员手工点击打包按钮。
       以上几种方式,都会存在一个问题:当一个程序通过全部的功能,性能测试后,这时候生成的web包是最稳定以及准确的。如果在这之后,由于程序员的误操作签入了某些存在问题的代码,这时,ccnet如果生成了web包,这个时候去部署,那么很难保证不出问题,往往这种问题是不太好查原因的。所以我采用人工核对的方式来手工完成web_auto的合并工作。这样可以保证每次去web.rar的签入都是可控的。
   
    为什么需要改进?由于公司的项目比较多,而且越是接近上线BUG就越多,从而使build和部署次数增加。我先说下我申请测试部门部署所需要做的工作:
  
   1 :由于我设置ccnet的触发方式为手工,所以第一步就是在ccnet网页上触发打包按钮。
   2 :获取生成的web_auto.rar,并解压。
   3 :核对web_auto,主要是看文件的正确性。有时配置的nant规则会造成文件复制错误。
   4 :获取并解压web.rar。
   5 :合并web_auto内容到web,并且压缩成最终的web.rar。
   6 :提交web.rar到SVN。
   7:发送部署申请邮件。
  
    虽然事情看起来还行,但如果部署的频率高的话,第一会花费不少时间;第二会不断打断你的工作思路。人工核对web_auto的工作不能少,但我就想把除了核对,发邮件之外的工作全部也来一个自动完成。
  
     解决方案说明:写一个批处理文件,让它来完成获取合并解压缩的工作,详细代码及说明如下:
  
    if exist "E:\deploy\%0\Web.rar" svn revert "E:\deploy\%0\Web.rar"
  
    这句话一般都是针对SVN提交问题,有时会因为某些误操作,使SVN在提交文件时发生错误,这样做的目的就是为了保证用户本地的文件和源代码库上的保持一致。
  
    if exist "E:\deploy\%0\Web_auto.rar" svn update "E:\deploy\%0\Web_auto.rar"
    if exist "E:\deploy\%0\Web.rar" svn update "E:\deploy\%0\Web.rar"
  
    这句话说明需要获取web_auto.rar以及web.rar,因为ccnet的操作界面是网页形式,意味着大家可以通过上网来控制ccnet的行为,说的再直接点就是每个人在打包时都需要获取web,这样才能保证不会覆盖其它同事的代码。
  
    if exist "E:\deploy\%0\Web.rar" svn lock "E:\deploy\%0\Web.rar"
  
    这句话就是首先锁定web包,防止同时有一个以上同事对这个文件进行操作。

    if exist  "E:\deploy\%0\Web_auto" Rd /s /q E:\deploy\%0\Web_auto
    if exist  "E:\deploy\%0\Web" Rd /s /q E:\deploy\%0\Web

    上面的语句就是先删除掉本地电脑上web.rar和web_auto.rar的解压缩文件夹。

   "D:\Program Files\WinRAR\unrar.exe"  x -r -y E:\deploy\%0\Web_auto.rar E:\deploy\%0\Web_auto\
   "D:\Program Files\WinRAR\unrar.exe"  x -r -y E:\deploy\%0\Web.rar E:\deploy\%0\Web\

    上面的语句是把获取到的两个压缩包进行解压缩。

     xcopy E:\deploy\%0\Web_auto\Web  E:\deploy\%0\Web\Web /y /s /r 

     这句表示把web_auto内的的所有内容复制到web中。

     "D:\Program Files\WinRAR\rar.exe" A -r -ep1 -ed E:\deploy\%0\Web\Web.rar -AD E:\deploy\%0\Web\Web

      压缩合并后的web文件夹,生成最终的web.rar
   
      svn cleanup E:\deploy\%0\
      这句也是防止SVN误操作。
   
      xcopy E:\deploy\%0\Web\Web.rar  E:\deploy\%0\Web.rar /y

      把之前压缩的web.rar覆盖到源码。

       svn commit -m "update new package"  E:\deploy\%0\Web.rar

       提交web.rar到SVN

       if exist "E:\deploy\%0\Web.rar" svn unlock "E:\deploy\%0\Web.rar"
       对web.rar实现解锁。
  
      成效:通过以上的改进,我的打包工作变成:(去掉了手工解压缩和合并的占用大量时间的工作部分,批处理文件运行时你可以去做你想做的事情。)
      1:手工触发打包按钮。
      2:简单验证下web_auto,保证所有的工作都是编译通过的。
      3:运行最后的批处理文件。
      4:发邮件申请部署。
  
  
  
    
      
         
   

原文地址:https://www.cnblogs.com/ASPNET2008/p/1648132.html