zoukankan      html  css  js  c++  java
  • 持续集成cruisecontrol.net学习总结

    1、什么是持续集成及相关工具
    大师Martin Fowler对持续集成是这样定义的:
     
    持续集成是一种软件开发实践,即团队开发成员经常集成它们的工作,通常每个成员每天至少

    集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,

    发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少

    集成的问题,让团队能够更快的开发内聚的软件。
     
    一些原则:
    1. 所有的开发人员需要在本地机器上做本地构建,然后再提交的版本控制库中,从而确保他

    们的变更不会导致持续集成失败。
    2. 开发人员每天至少向版本控制库中提交一次代码。
    3. 开发人员每天至少需要从版本控制库中更新一次代码到本地机器。
    4. 需要有专门的集成服务器来执行集成构建,每天要执行多次构建。
    5. 每次构建都要100%通过。
    6. 每次构建都可以生成可发布的产品。
    7. 修复失败的构建是优先级最高的事情。

    持续集成工具:
    主要有cruisecontrol.net(开源)和vsts(微软)

    cc.net说明:
    它是cruisecontrol的.net版本。本软件开源免费。
    它只是一个持续集成中的一个架构性软件。它要和其它相关软件结合使用才能发挥作用。
    如版本管理工具svn、编译工具msbuild、代码检查工具fxCop、单元测试工具nuit.net
    cc.net负责把这些工具串连起来共同作用。




    2、安装

    cc.net 分服务器软件和客户端软件
    环境:

    服务器端:
    安装.net FrameWork:具体版本根据cc.net的版本而定。
    安装IIS:cc.net包含WEB应用

    环境很重要,我就吃了这个苦头,一开始照着其他人的方法,就是执行不了,原来是我公司的

    机器的环境有些问题,没装iis。后来装了iis,iis还是有问题,没有办法,只好用自己的笔

    记本重新安装了环境。
     
    安装顺序:IIS->.NET->others
     
    首先安装IIS,用测试页面检测IIS无误后,安装VS2005,然后再安装cruisecontrol.net,从

    控制面板进入IIS控制界 面。检查有无名为ccnet的虚拟目录,如果有正常,右键浏览,应该

    可以看到cruisecontrol.net的default页面。
     
    环境很重要,我就吃了这个苦头,一开始照着其他人的方法,就是执行不了,原来是我公司的

    机器的环境有些问题,没装iis。后来装了iis,iis还是有问题,没有办法,只好用自己的笔

    记本重新安装了环境。
     
    安装顺序:IIS->.NET->others
     
    首先安装IIS,用测试页面检测IIS无误后,安装VS2005,然后再安装cruisecontrol.net,从

    控制面板进入IIS控制界 面。检查有无名为ccnet的虚拟目录,如果有正常,右键浏览,应该

    可以看到cruisecontrol.net的default页面。
     

    客户端:
    安装.net FrameWork:具体版本根据cc.net的版本而定。

    然后安装CruiseControl.NET Tray【以下简称CCTray】来监视每次提交后的编译状态。
    CCTray是一个工具,通过它可以强制执行编译,当然也可以自动编译,然后查看编译的结果。
     
    在服务中找到【cruisecontrol.net server】这项,并启动他。
     
    注意:如果想用浏览器查看cruisecontrol界面,必须关闭迅雷等占用8080端口的程序。

     

    3、配置(CruiseControl.Net+SVN+MSBuild自动编译环境)


    配置CruiseControl.NET安装目录下(我的机器上是:C:\Program

    Files\CruiseControl.NET\server)下的ccnet.config文件,此文件是指定

    cruisecontrol.net 怎么运行的,文件中是有关于cruisecontrol.net 的配置。

    注意:每次改动了ccnet.config文件的话,都要重启【cruisecontrol.net server】服务。


    我使用的版本管理器是SVN 1.63 ,编译工具是MSBuild 2010,代码检查工具FXCop1.35,

    我写了一个最简单的:

    <cruisecontrol>
    <project name="Painter">
    <triggers>
    <intervalTrigger seconds="10"/>
    </triggers>
    <webURL>http://127.0.0.1/ccnet</webURL>
    <artifactDirectory>f:</artifactDirectory>
    <sourcecontrol type="svn" autoGetSource="true">
    <executable>C:\Program Files\Subversion\bin\svn.exe</executable>
    <username>liuli</username>
    <password>liuli</password>
    <trunkUrl>svn://192.168.1.100/reponsity/</trunkUrl>
    <workingDirectory>d:\tmp\</workingDirectory>
    </sourcecontrol>
    <tasks>
    <msbuild>
    <executable>C:\windows\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe</executable>
    <workingDirectory>D:\tmp\build</workingDirectory>
    <projectFile>Painter.sln</projectFile>
    <buildArgs>/noconsolelogger /p:Configuration=Debug</buildArgs>
    <timeout>15</timeout>

    </msbuild>
    </tasks>
    </project>
    </cruisecontrol>

     
    说明:
    <project>项目节点,支持多个项目
    <sourcecontrol></sourcecontrol>之间写的是从服务器上获得代码的过程,具体指定使用的

    是哪种源代码管理工具。

    <triggers> </triggers>是触发器。

    这两个加起来的作用是:每个10秒中检测服务器上代码是否有改动,如果有,则更新文件到客

    户端。

     <tasks>是任务

    <msbuild>是要进行编译的任务,msbuild还有发布的功能,后面的例子中会有说明



    我的项目配置说明:

    我有两个项目进行持续集成。一个test web应用,一个解决方案内有多个子项目。
    要求:每个项目能够自动从源代码管理器svn中获取最新代码,然后进行编译,进行代码检查

    ,最后进行发布。
    配置文件如下:

    <!--<ccnetconfig><configurationVersion>1.4</configurationVersion></ccnetconfig>-->
    <cruisecontrol>
      <project name="TestSystem" queuePriority="0">
        <workingDirectory>C:\DailyBuild</workingDirectory>
        <artifactDirectory>C:\DailyBuild\log\buildlogs</artifactDirectory>
       

    <webURL>http://192.168.0.151/ccnet/server/local/project/TestSystem/ViewProjectRepo

    rt.aspx</webURL>
        <modificationDelaySeconds>2</modificationDelaySeconds>
        <sourcecontrol type="svn">
          <trunkUrl>http://192.168.0.151:8080/svn/test</trunkUrl>
          <workingDirectory>C:\DailyBuild\test</workingDirectory>
          <executable>C:\Program Files\VisualSVN Server\bin\svn.exe</executable>
          <username>admin</username>
          <password>123456</password>
          <autoGetSource>True</autoGetSource>
        </sourcecontrol>
        <triggers>
          <intervalTrigger name="myTriger" seconds="6000"

    buildCondition="IfModificationExists" />
        </triggers>
        <tasks>
          <msbuild>
            <executable>C:\windows\Microsoft.NET\Framework\v4.0.30319

    \MSBuild.exe</executable>
            <workingDirectory>C:\DailyBuild\test</workingDirectory>
            <projectFile>WebApplication2.csproj</projectFile>
            <buildArgs>/t:ResolveReferences;Compile /t:_CopyWebApplication

    /p:Configuration=Release /p:WebProjectOutputDir=C:\publish

    /p:OutputPath=C:\publish\bin /v:diag</buildArgs>
            <targets>Build</targets>
            <logger>ThoughtWorks.CruiseControl.MsBuild.XmlLogger,C:\Program

    Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
            <timeout>180</timeout>
          </msbuild>

        <exec>
            <executable>C:\Program Files\Microsoft FxCop 1.35

    \FxCopCmd.exe</executable>
            <baseDirectory>C:\DailyBuild\fxCops\</baseDirectory>
            <buildArgs>/p:"test.FxCop"

    /out:"C:\DailyBuild\log\buildlogs\FxCop-results.xml" /gac</buildArgs>
            <buildTimeoutSeconds>120</buildTimeoutSeconds>
       </exec>

        </tasks>
        <publishers>
        <merge>
            <files>
                <file>C:\DailyBuild\log\buildlogs\FxCop-results.xml</file>
            </files>
        </merge>
        <xmllogger logDir="C:\DailyBuild\log\buildlogs\"></xmllogger>

          <email mailhost="192.168.0.2" from="Sysuser@eastsim.mail">
            <mailhostUsername>Sysuser@eastsim.mail</mailhostUsername>
            <mailhostPassword>BestSim</mailhostPassword>
            <includeDetails>True</includeDetails>
            <users>
              <user name="zhaoshiyuan" address="zsy@eastsim.mail" group="webGroup" />
              <user name="yangtao" address="yt@eastsim.mail" group="webGroup"

    />       
            </users>
            <groups>
              <group name="webGroup"  />
            </groups>
            <modifierNotificationTypes>
              <NotificationType>Always</NotificationType>
            </modifierNotificationTypes>
          </email>
        </publishers>
        <state type="state" directory="C:\DailyBuild\CCState" />
        <labeller type="dateLabeller" />
      </project>
     
      <project name="FrameWorkSystem" queuePriority="0">
        <workingDirectory>C:\DailyBuild</workingDirectory>
        <artifactDirectory>C:\DailyBuild\log\FrameWorkLogs\</artifactDirectory>
       

    <webURL>http://192.168.0.151/ccnet/server/local/project/FrameWorkSystem/ViewProjec

    tReport.aspx</webURL>
        <modificationDelaySeconds>2</modificationDelaySeconds>
        <sourcecontrol type="svn">
          <trunkUrl>http://192.168.0.151:8080/svn/FrameWork</trunkUrl>
          <workingDirectory>C:\DailyBuild\FrameWork</workingDirectory>
          <executable>C:\Program Files\VisualSVN Server\bin\svn.exe</executable>
          <username>admin</username>
          <password>123456</password>
          <autoGetSource>True</autoGetSource>
        </sourcecontrol>
        <triggers>
          <intervalTrigger name="myTriger" seconds="6000"

    buildCondition="IfModificationExists" />
        </triggers>
        <tasks>
        <msbuild>
            <executable>C:\windows\Microsoft.NET\Framework\v4.0.30319

    \MSBuild.exe</executable>
            <workingDirectory>C:\DailyBuild\FrameWork\SQLServerDAL\</workingDirectory>
            <projectFile>FrameWork.SQLServerDAL.csproj</projectFile>
            <buildArgs>/t:build /p:Configuration=Release

    /p:OutputPath=C:\publish\FrameWork\bin /v:diag</buildArgs>
            <targets>Build</targets>
            <logger>ThoughtWorks.CruiseControl.MsBuild.XmlLogger,C:\Program

    Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
            <timeout>120</timeout>
        </msbuild>
       
          <msbuild>
            <executable>C:\windows\Microsoft.NET\Framework\v4.0.30319

    \MSBuild.exe</executable>
            <workingDirectory>C:\DailyBuild\FrameWork\WebManage\</workingDirectory>
            <projectFile>FrameWork.WebManage.csproj</projectFile>
            <buildArgs>/t:ResolveReferences;build /t:_CopyWebApplication

    /p:Configuration=Release /p:WebProjectOutputDir=C:\publish\FrameWork\

    /p:OutputPath=C:\publish\FrameWork\bin /v:diag</buildArgs>
            <targets>Build</targets>
            <logger>ThoughtWorks.CruiseControl.MsBuild.XmlLogger,C:\Program

    Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
            <timeout>600</timeout>
          </msbuild>-->
    <!--
        <exec>
            <executable>C:\Program Files\Microsoft FxCop 1.35

    \FxCopCmd.exe</executable>
            <baseDirectory>C:\DailyBuild\fxCops\</baseDirectory>
            <buildArgs>/p:"FrameWork.FxCop"

    /out:"C:\DailyBuild\log\FrameWorklogs\FxCop-results.xml" /gac</buildArgs>
            <buildTimeoutSeconds>120</buildTimeoutSeconds>
       </exec>
    -->
        </tasks>
        <publishers>
        <merge>
            <files>
            <!--
                <file>C:\DailyBuild\log\FrameWorklogs\FxCop-

    results.xml</file> -->
            </files>
        </merge>
        <xmllogger logDir="C:\DailyBuild\log\FrameWorklogs\"></xmllogger>

          <email mailhost="192.168.0.2" from="Sysuser@eastsim.mail">
            <mailhostUsername>Sysuser@eastsim.mail</mailhostUsername>
            <mailhostPassword>BestSim</mailhostPassword>
            <includeDetails>True</includeDetails>
            <users>
              <user name="zhaoshiyuan" address="zsy@eastsim.mail" group="webGroup" />
              <!--<user name="yangtao" address="yt@eastsim.mail"

    group="webGroup" />    -->   
            </users>
            <groups>
              <group name="webGroup"  />
            </groups>
            <modifierNotificationTypes>
              <NotificationType>Always</NotificationType>
            </modifierNotificationTypes>
          </email>
        </publishers>
        <state type="state" directory="C:\DailyBuild\CCState" />
        <labeller type="dateLabeller" />
      </project>
     
    </cruisecontrol>

    说明:
    第一个projectTestSystem。是个测试项目,web应用程序。
    <workingDirectory>工作目录
    <artifactDirectory>项目日志输出目录
    <sourcecontrol type="svn">指定源代码管理器为svn.
    <trunkUrl>http://192.168.0.151:8080/svn/test</trunkUrl>项目源代码地址
    【注意了】在这个地方我花了多少时间来配置。
    1)、网上大多的svn配置都是老版本。地址类型为svn:XXX/XXX。而我的svn为1.63版本,使用

    的是WEB发布方式,地址类型为http://server.cm/svn/xxxx。
    这个地址就是svn项目的地址。
    2)、默认使用SSH(https)。但我搞半天也没搞清楚。就改Svn配置,直接使用http了。

    <triggers>我使用每隔6000秒检查一次是否有新版本,如果有就签出新版本,进行编译,发布

    等。
    <msbuild>:负责编译,发布。。
    关于发布使用这两个属性就完全搞定了
    /t:ResolveReferences  :指定编译包含的引用
    /t:_CopyWebApplication:指定发布,拷贝web应用文件
    /p:WebProjectOutputDir=C:\publish\FrameWork\ :指定拷贝地址
    /p:OutputPath=C:\publish\FrameWork\bin :指定编译后的bin输出地址


    <email>指定集成结果发送邮件到指定用户邮件中

    第二个project。此包含7个类项目,一个web项目,但最后要发布是web项目。
    此处要注意两点:
    1)、项目之间的引用最好使用项目引用方式,不要直接引用dll。这样就可以只编译web项目。

    msbuild会自己编译引用的其它项目。
    2)、有3个类项目没有被web项目直接引用。使用的反射机制。所以编译web项目时,不会自动

    编译这三个项目。但这三个项目中有一个引用了另两个。最后再多编译一个项目就行了。如上

    我有两个<msbuild>节



    4、注意事项及常见问题
    1)、清楚项目间的引用关系
    2)、间接引用项目的输出路径要指定到发布后的相关位置上。


    5、相关资源

    1)cc.net官网地址:
    http://sourceforge.net/projects/ccnet/
    2)cc.net参考手册

    3)ccnet.config的配置工具
     http://ccnetconfig.codeplex.com/
    4)其它参考
    介绍比较全的文章
     http://tech.it168.com/m/2008-05-04/200805042108206.shtml
    http://kb.cnblogs.com/a/1512017/
  • 相关阅读:
    Mybatis+Spring整合
    java 线程详解
    java 异常处理
    java 日期 时间操作
    RandomAccessFile 详解
    js导入excel
    java 常见异常
    常用的java程序片段(算法)
    IO流详解
    json 详解
  • 原文地址:https://www.cnblogs.com/zsyzsj/p/2002324.html
Copyright © 2011-2022 走看看