DailyBuild搭建记录
DailyBuild搭建记录
1 DailyBuild搭建记录
公司要搭建DailyBuild工作环境,进行持续化集成开发,持续化集成工具便是服务于敏捷 软件开发的一个系列。它主要将原本分散,无序的工作流程,通过工具软件有机的组织起 来,并且在组织的过程中,参与开发设计测试的各个部门的人员都能从中获取到自动化方 面的优惠,使得团队的工作效率大大提升,方便分布式开发,以下是搭建过程记录。
测试环境:
- 开发机器:192.168.0.102,winxp sp2.0+vs2005
- svn服务器:192.168.0.101,debian/linux
1.1 下载
- download CruiseControl.NET,CC.Net是一款开源软件,它的官方主页是: http://confluence.public.thoughtworks.org/display/CCNET/Welcome+to+CruiseControl.NET
- 版本管理工具 SVN ( 命令行端: Slik-Subversion-1.7.8-win32.msi WIN客户端:TortoiseSVN-1.6.2.16344-win32-svn-1.6.2.msi )
- 使用NAnt配置起来比较麻烦,还是使用MsBuild来做构建工具。MsBuild是随.Net FrameWork 2.0一起安装的,可以在C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727目 录下找到`MSBuild.exe'
- 代码规范检查工具使用FxCop.exe,在网上找了几个网站,终于找到适合Net FrameWork 2.0的版本: http://archive.msdn.microsoft.com/codeanalysis/Release/ProjectReleases.aspx?ReleaseId=553
- 单元测试工具:Nunit,官方主页:http://sourceforge.net/projects/nunit
- NUnit2report将NUnit生成的XML文件“样式”成HTML文件的一个小工具。 http://sourceforge.net/projects/nunit2report/
1.2 安装
- 确保你的电脑上已经安装了IIS(因为CC.NET会在IIS里面建立一个虚拟目录作为Web服务, 我的机器中没有IIS,手头又没有xp光盘,在网上找了个不用光盘安装IIS的方 法,http://www.52z.com/soft/22412.html ,才把IIS安装好
- IIS中注册asp.net服务,在winsods运行框內输入: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnetregiis.exe -i
- CruiseControl.NET-1.8.3.0是目前最新版本,需要.net framework3.5类库支持,安装 framework 3.5环境
- OK,现在可以安装cc.net服务器端和客户端,默认会把CCNET安装为WINDOWS服务,手动启 动,请改为自动启动。还会在IIS下安装一个 webdashboard,可以通过WEB访问CCNET,并 可以进行相关的强制构建,查看日志及其他的管理等。
- 安装成功,不要高兴太早。你打开IIS看看你的默认的web站点下面有名为ccnet的虚拟目录 吗,如果有,右键浏览,出现如图所示的界面,才能说cc.net安装成功了,否则是前面的 哪个步骤有问题,我在这里耗了不少时间
1.3 初级配置
- cc.net安装目录下有Example目录,其中的配置文件可以供参考。主配置文件为:ccnet.config。 一般来说ccnet.config每个构建项目有如下几部分:触发器(triggers),源码管理器 (sourcecontrol),任务(tasks),测试(test)等
- 我已有一个实际的项目,在D:\workspace\temperApplication\temper目录下,打算建 立一个的cc.net工作模式,使用定时(30秒)触发,使用filesystem源码管理,用 MSBuild构建,用NUnit测试
- 定时(30秒)触发
项目名称MyFirstProject,触发设置为毎30次,buildCondition选项为 IfModificationExists表示仅当检测到文件修改时才进行构建。
<project name="MyFirstProject" description="demoproject showing a small config"> <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"/> </triggers> ...
- filesystem源码管理
这里对源码管理简化,不用版本控制,cc.net只判断 `D:\workspace\temperApplication\temper'目录下文件是否有修改,如有修改,构 建就会开始
<sourcecontrol type="filesystem"> <repositoryRoot>D:\workspace\temperApplication\temper</repositoryRoot> <checkRecursively>false</checkRecursively> </sourcecontrol>
- 用MSBuild构建
<tasks> <msbuild> <executable>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe</executable> <workingDirectory>D:\workspace\temperApplication\temper</workingDirectory> <projectFile>temper.sln</projectFile> <buildArgs></buildArgs> <targets></targets> <timeout>60</timeout> <logger>d:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MSBuild.dll</logger> </msbuild> </tasks>
MSBuild在`C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\'目录下,buildArgs 表示传递给构建程序的参数。
<logger>d:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MSBuild.dll</logger>
`ThoughtWorks.CruiseControl.MSBuild.dll'是一个CCNET的日志 插件,用于转换 MSBuild的输出为XML格式。
- 我们最终的ccnet.config配置是如下,现在我们已经可以感受一下cc.net了
<cruisecontrol xmlns:cb="urn:ccnet.config.builder"> <!-- This is your CruiseControl.NET Server Configuration file. Add your projects below! --> <project name="MyFirstProject" description="demoproject showing a small config"> <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"/> </triggers> <sourcecontrol type="filesystem"> <repositoryRoot>D:\workspace\temperApplication\temper</repositoryRoot> <checkRecursively>false</checkRecursively> </sourcecontrol> <tasks> <msbuild> <executable>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe</executable> <workingDirectory>D:\workspace\temperApplication\temper</workingDirectory> <Projectfile>temper.sln</projectFile> <buildArgs></buildArgs> <targets></targets> <timeout>60</timeout> <logger>d:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MSBuild.dll</logger> </msbuild> </tasks> <publishers> <xmllogger /> <artifactcleanup cleanUpMethod="KeepLastXBuilds" cleanUpValue="50" /> </publishers> </project> </cruisecontrol>
- 打开在浏览器中输入`http://http://127.0.0.1/ccnet/' 会出现cc.net的管理界面, 我们要修改一下`D:\workspace\temperApplication\temper'目录下的文件 Awareness.cs,可以在浏览器中看到构建情况和细节
- 可以安装cc.net的客户端,CCTray:添加服务器及项 目:File->Settings->BuildProjects->Add->Add Server。选一个连接类型,输入相应 的服务器地址或URL,再从Available Projects列表中选择相应的项目点击“OK“即可。 这样就可以在CCTray的主界面的列表中看到刚添加的项目,可以进行强制构建,停止构 建等活 动,还可以看到构建的状态,失败红色,进行中黄色,成功绿色。还可以选择 一些其他的如声音提示等。
1.4 svn配置
- 安装Slik-Subversion-1.7.8-win32.msi,这是svn命令行工具,TortoiseSVN客户端 GUI。cc.net要用svn命令行工具。
- 我的svn服务器用的是debian/linux,IP是192.168.0.101,cc.net安装在 192.168.0.102的winxp系统上。linux svn服务已配置与apache结合,可以通过htt访 问。在ccnet.config配置中将sourcecontrol段改为:
<sourcecontrol type="svn"> <trunkUrl>http://192.168.0.101/svn/demodulate/temper</trunkUrl> <workingDirectory>D:\code</workingDirectory> <executable>D:\Program Files\SlikSvn\bin\svn.exe</executable> <username>user</username> <password>password</password> </sourcecontrol>
- 现在当svn代码库中有变化,cc.net自动会更新到workingDirectory目录,并开始构建工 程。比如我修改提交了库里的文件Awareness.cs,workingDirectory目录中 Awareness.cs更新了,cc.net重新构建了,见下图。
1.5 待续
后面我将把FxCop,NUnit,NUnit2report,发布,email通知都配置进cc.net。