持续集成:CruiseControl.NET + VisualSVN.Server

  刚换了工作,有需要搭建一套持续集成的平台,做一下总结。

  首先是我用到的工具:

              

  上面缺少了Microsoft Fxcop,可以用来做代码校验,不过实际情况暂时还没有用到。主要的需求目前是,使用已发布的稳定版本代码作为新发布版本代码的基础,避免有未完成的代码存在于发布版本中,同时自动化集成发布后,上传该新发布版本代码到tags中。elevate一般情况下是不需要的,不过VisualSVN无法使用命令行登陆,可以使用它来提升执行权限,不过最终我使用了另外一个办法,这个方法需要购买VisualSVN Server的License,后面会说。

  安装过程就不赘述了,相信有兴趣看这个的都是做软件的,下一步之类还有一些选项什么的没什么可说的。安装的时候部署的监控网站可能不成功,只要自己手动在IIS上布下就好。另外,先提一句CCTray是可以把配置好的集成方案服务添加运行的工具,添加好后本身也具有监控的功能,区别是它客户端工具。

  先说SVN服务器,VisualSVN Server是比较简单的SVN服务端,所以功能比较简单,比如就缺少命令行登陆的功能,不过另一方面就是安装很简单。有两点需要说明一下,一是新建Repository时,勾选分为branches tags trunk三个目录,分别用来放分支代码,发布版代码,主干版本代码,其中tags下的代码是只能新增不能修改的;另外一点是权限问题,我使用的是windows的账户做操作的,在这种情况下,有个选项要勾选上,不然执行svn提交代码命令时,会报错身份验证不通过。

                      

  上图红框就是需要勾选的,不过勾选这个是需要License的。

  接下来就是主题部分了,安装完CC以后,到开始菜单里找到对应的菜单,会发现里面有个配置文件,对应的就是安装好的目录下的ccnet.config文件,另外还有个验证工具,可以用来辅助配置,一目了然的东西就不细说了,下面说说配置。

<cruisecontrol xmlns:cb="urn:ccnet.config.builder">
  <!-- This is your CruiseControl.NET Server Configuration file.
       Add your projects below! -->
这里配置服务的名字,一个project对应的就是一个集成方案,可以独立执行
  <project name="ProjectTest"
           description="demoproject showing a small config" queue="Q1">
工作使用的目录
    <workingDirectory>D:\Store</workingDirectory>
这里是正在集成工程中的临时配置文件保存的地方,一次执行结束后,该配置文件会被放到配置的日志文件夹中      <artifactDirectory>D:\Store\Artifacts</artifactDirectory>

    <!-- specify a state folder to prevent CCNet from saving it in Program Files\CruiseControl.NET\server
         programs may not standard write their data in it on windows Vista and up)
    -->
    <state type="state" directory="D:\Store\State" />

    <!-- specify a artifactDirectory to prevent CCNet from saving it in Program Files\CruiseControl.NET\server
         programs may not standard write their data in it on windows Vista and up)
    -->
这是监控页面    <webURL>http://localhost:90/ViewLatestBuildReport.aspx</webURL>
    <modificationDelaySeconds>10</modificationDelaySeconds>

    <triggers>
      <!-- check the source control every X time for changes,
         and run the tasks if changes are found -->
      <!--<intervalTrigger
               name="continuous"
               seconds="30"
               buildCondition="IfModificationExists"
               initialSeconds="5"/>-->
      <intervalTrigger name="continuous" seconds="6000" />
    </triggers>
这里是配置获取源码的位置,使用svn
    <sourcecontrol type="svn">
      <executable>C:\Program Files\VisualSVN Server\bin\svn.exe</executable>
      <trunkUrl>https://aaa/svn/Test/trunk</trunkUrl>
      <username>svn</username>--登陆svn使用的用户名密码,这个是我在测试服务器上创建的测试账户
      <password>svn</password>
      <workingDirectory>D:\Store\Code</workingDirectory>--获取下来源码的存放位置
      <autoGetSource>true</autoGetSource>
    </sourcecontrol>
    <tasks>

      <!-- if you want the task to fail, ping an unknown server -->这个ping的作用在这里仅仅是测试的时候,改成错的可以让它后面的配置都不执行
      <exec>
        <executable>ping.exe</executable>
        <buildArgs>localhost</buildArgs>
        <buildTimeoutSeconds>15</buildTimeoutSeconds>
        <description>Pinging a server</description>
      </exec>

这里是编译解决方案的配置,也可以每个项目分别编译,projectFile配置成项目的csproj文件就可以
      <msbuild>
        <executable>C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable>
        <workingDirectory>D:\Store\Code</workingDirectory>
        <projectFile>D:\Store\Code\*******.sln</projectFile>
        <buildArgs>/noconsolelogger /p:Configuration=Release;OutDir=D:\Store\Run\ /v:diag</buildArgs>
        <logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MSBuild.dll</logger>
        <targets>Build</targets>
        <timeout>900</timeout>
      </msbuild>

这是用来配置发布位置的,sourceDir是生成的位置,publishDir是发布的位置可以配置成远程的共享目录      <buildpublisher>
        <sourceDir>D:\Store\Run</sourceDir>
        <publishDir>D:\Store\Release</publishDir>
        <useLabelSubDirectory>false</useLabelSubDirectory>
      </buildpublisher>

      <!--删除.svn文件-->
这个批处理文件时用来清除代码中svn绑定的,因为这份代码需要提交到Tags上,这个批处理代码类似的网上到处都是我就不贴了      <exec executable="D:\Store\delSVN.bat" />
这段注释掉的是单元测试的配置,不过由于原来的代码都没做单元测试,所以就先注释掉了
      <!--删除单元测试结果文件,否则不会创建新的结果文件
      <exec executable="D:\Store\delTestResult.bat" />-->

      <!--
      buildArgs:参数,/testcontainer:单元测试项目程序集(可以包含多个)  /resultsfile:测试结果文件
      <exec>
        <executable>C:\Program Files\Microsoft Visual Studio 11.0\Common7\IDE\mstest.exe</executable>
        <baseDirectory>D:\Store\UNTest</baseDirectory>
        <buildArgs>/testcontainer:TestProject\bin\Debug\TestProject.dll /resultsfile:TestResults\mstest-results.xml</buildArgs>
        <buildTimeoutSeconds>300</buildTimeoutSeconds>
      </exec>-->

提交代码的批处理:

cd /d %~dp0
"C:\Program Files\VisualSVN Server\bin\svn.exe" import -m "New Tags" D:\Store\Code https://aaa/svn/Test/tags/Tags_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%

      <!--提交Tags代码-->
      <exec executable="D:\Store\svnCTags.bat" />
    </tasks>

    <publishers>
这个是完成后全部的日志      <xmllogger logDir="D:\Store\Log"/>
日志可以配置成发送邮件,不过这里不需要
    </publishers>

  </project>

第二个集成服务  <project name="ProjectTestWithOutGetSource"
           description="demoproject showing a small config" queue="Q1">

    <workingDirectory>D:\Store</workingDirectory>
    <artifactDirectory>D:\Store\Artifacts</artifactDirectory>
    <state type="state" directory="D:\Store\State" />
    <webURL>http://localhost:90/ViewLatestBuildReport.aspx</webURL>
    <modificationDelaySeconds>10</modificationDelaySeconds>

    <triggers>
      <intervalTrigger name="continuous" seconds="6000" />
    </triggers>

    <sourcecontrol type="svn">
      <executable>C:\Program Files\VisualSVN Server\bin\svn.exe</executable>
      <trunkUrl>https://aaa/svn/Test/trunk</trunkUrl>
      <username>svn</username>
      <password>svn</password>
      <workingDirectory>D:\Store\Code</workingDirectory>
      <autoGetSource>true</autoGetSource>
    </sourcecontrol>

    <tasks>

      <!-- if you want the task to fail, ping an unknown server -->
      <exec>
        <executable>ping.exe</executable>
        <buildArgs>localhost</buildArgs>
        <buildTimeoutSeconds>15</buildTimeoutSeconds>
        <description>Pinging a server</description>
      </exec>

      <msbuild>
        <executable>C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable>
        <workingDirectory>D:\Store\Code</workingDirectory>
        <projectFile>D:\Store\Code\*******.sln</projectFile>
        <buildArgs>/noconsolelogger /p:Configuration=Release;OutDir=D:\Store\Run\ /v:diag</buildArgs>
        <logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MSBuild.dll</logger>
        <targets>Build</targets>
        <timeout>900</timeout>
      </msbuild>

      <buildpublisher>
        <sourceDir>D:\Store\Run</sourceDir>
        <publishDir>D:\Store\Release</publishDir>
        <useLabelSubDirectory>false</useLabelSubDirectory>
      </buildpublisher>

      <!--删除.svn文件-->
      <exec executable="D:\Store\delSVN.bat" />
      <!--提交Tags代码-->
      <exec executable="D:\Store\svnCTags.bat" />

    </tasks>

    <publishers>
      <xmllogger logDir="D:\Store\Log"/>
    </publishers>

  </project>

</cruisecontrol>

最后是我集成使用的测试目录,可以不用自己创建,集成过程中会自己创建的

                    

时间: 2024-10-19 00:19:24

持续集成:CruiseControl.NET + VisualSVN.Server的相关文章

搭建你的持续集成server - CruiseControl step by step(1)

CruiseControl是CIserver的老者,诞生已是多年,在很多方面,CruiseControlserver已经成为持续集成实践的同义词.而如今,CruiseControl已发展成为一个家族式系统,包含CruiseControl.java.CruiseControl.net.CruiseControl.ruby等适应不同语言环境的实现,其强大的插件和扩展能力也是诸多同类系统无法比你的.而在这里,我仅仅介绍该家族的本家CruiseControl.java,即CruiseControl.Cr

使用CruiseControl.Net全面实现持续集成

持续集成想必大家很多人都听说过,甚至都实践过,最近我又一次亲历了一次持续集成,现将我的经验分享给大家.关于持续集成的理论在本文概不涉及,本文的主要目的是实战CruiseControl.Net,用它来全面实现持续集成. 在配置ccnet.config时会用到一些小工具,一并附上:小工具下载 首先,我们来看看用CC.Net能为我们做哪些事情: 自动获取源代码 自动Build 自动执行UnitTest,并生成单元测试报告 自动部署 触发自动化(回归)测试 邮件提醒 使用CCTray进行监控 应用plu

搭建你的持续集成环境——CruiseControl介绍

虽然起了个煞有介事的标题,但是其实只是把在工作中碰到的跟CruiseControl这个工具打交道的经历记录下来,因为听说有个技术博客找工作会加分很多(笑),嗯,让我们开始吧! 相信百度到CruiseControl的同学也已经知道持续集成(CI)是个什么玩意了,这篇文章的作者很懒,就不多废话了,贴上两个百度百科的链接. 关于持续集成 关于CruiseControl 先放上一张使用中的CruiseControl的架构图,然后就有点困了,嗯,那就再见~

持续集成(Continuous Integration)

持续集成简称CI,持续集成是频繁.持续的在多个团队成员的工作中进行集成,并且给与反馈.一个典型的持续集成周期包括以下几个步骤:   1. 持续集成服务器不断从版本控制服务器上检查代码状态,看代码是否有更新.   2. 如果发现代码有最新的提交,那么就从版本控制服务器下载最新的代码.   3. 等代码完全更新以后,调用自动化编译脚本,进行代码编译.   4. 运行所有的自动化测试.   5. 进行代码分析.   6. 产生可执行的软件,能够提供给测试人员进行测试.   持续集成服务器,比如Crui

持续集成及部署利器:Go(不要和Google的编程语言Go混淆了!)

Go是一款先进的持续集成和发布管理系统,由ThoughtWorks开发.(不要和Google的编程语言Go混淆了!)其前身为CruiseControl,是ThoughtWorks在做咨询和交付交付项目时自己开发的一款开源的持续集成工具.后来随着持续集成及持续部署的火热,ThoughtWorks专门成立了一个项目组,基于Cruise开发除了Go这款工具.ThoughtWorks开源持续交付工具Go,Go的官方网站是http://www.go.cd/,其文档是http://www.thoughtwo

用持续集成工具Travis进行构建和部署

用持续集成工具Travis进行构建和部署 摘要:本文简单说明了如何使用持续集成工具Travis进行构建和部署的过程. 1. 概述 持续集成(Continuous Integration)是软件开发过程中的重要环节,不论是在开发环境,还是生产环境,其好处都是可以让团队尽快得到反馈,从而尽早发现和解决问题,不要等到用户来报告问题,影响产品和团队的声誉.越早越快地发现和解决问题,成本越低,这也是敏捷开发的基本目的之一. 持续集成的工具有不少,著名的有CruiseControl.JetBrains的Te

八大持续集成工具

八大持续集成工具 下面依次介绍8大持续集成工具 一.Hudson Hudson 是一个可扩展的持续集成引擎,主要用于: 持续.自动地构建/测试软件项目,如CruiseControl与DamageControl. 监控一些定时执行的任务. Hudson的特性如下: 易于安装-只要把hudson.war部署到servlet容器,不需要数据库支持. 易于配置-所有配置都是通过其提供的web界面实现. 集成RSS/E-mail/IM-通过RSS发布构建结果或当构建失败时通过e-mail实时通知. 生成J

为什么要做持续集成

持续集成在目前大多数的公司里都会有这样或者那样的使用.有的会选择一些Open Source的工具,如CruiseControl,Hudson,LuntBuild等等等等,有的会购买有更好服务,更强功能的商业产品,如TeamCity,QuickBuild等等,而有的会选择自己实现,如Cron+Ant/Maven/Make等等.那么使用下来效果如何呢?真得达到了预期的效果吗?我想来恐怕未必吧,否则也就不会有这么多的讨论了.[@[email protected]] 持续集成与敏捷编程 在敏捷领域中,测

持续集成及部署利器:Go

Go是一款先进的持续集成和发布管理系统,由ThoughtWorks开发.(不要和Google的编程语言Go混淆了!)其前身为CruiseControl,是ThoughtWorks在做咨询和交付交付项目时自己开发的一款开源的持续集成工具.后来随着持续集成及持续部署的火热,ThoughtWorks专门成立了一个项目组,基于Cruise开发除了Go这款工具.ThoughtWorks开源持续交付工具Go,Go的官方网站是http://www.go.cd/,其文档是http://www.thoughtwo