求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
  
 
 
     
   
分享到
持续集成DailyBuild实践
 
作者 宁 宁,火龙果软件    发布于 2013-11-20
 

1实验目的

了解持续集成的概念和方法,掌握DailyBuild及其相关工具的使用。

2 环境

Microsoft Visual Studio.NET 2005

3 所需软件列表

3.1 CruiseControl.NET version 1.1;

项目监控工具。

3.2 Nant version 0.85;

基于.NET的自动化编译工具。

3.3 Nant Contrib;

增强Nant的工具。

3.4 NUnit version 2.2.8 for .NET 2.0;

单元测试的一个比较优秀的工具。

3.5 NUnit2 Report version 1.2.2;

将NUnit生成的XML文件“样式”成HTML文件的一个小工具。

3.6 FxCop version 1.35;

代码规范检查工具。

3.7 Microsoft Visual Source Safe .NET 2005

版本控制工具。

4 过程和步骤

4.1安装上述软件

程序运行总框架如下图4.1。

图4.1

说明:

CC.Net 监控VSS里的变化,如果发现有变化,CC.Net立即调出NAnt将最新改动的VSS里的数据拷贝到本地并且进行编译,将结果输出.生成DLL程序集或者EXE可执行文件.NAnt将得到的将要执行单元测试的程序集DLL文件交给NUnit检测并且生成XML文件(为了方便我在这里又将XML文件”样式”成HTML文件,打开即以图形方式查看)。 并且将得到的程序集交给FxCop检查,并生成XML文件,检查编码是否规范. 只要将CC.NET打开,并且设置好配置文件,这一切就是自动化的,需要的只是你的眼睛来看结果而已。

4.2建立两个工程

4.2.1待测项目

新建Student类库项目,使之生成Student.dll程序集。源码如下:

student.cs

using System; 
using System.Collections.Generic; 
using System.Text; 
namespace Student 
{ 
public class Student 
{ 
private string name; 
private int age; 
public Student() 
{ } 
public Student(string sname, int sage) 
{ 
Name = sname; 
Age = sage; 
} 
public string Name 
{ 
get 
{ 
return name; 
} 
set 
{
name = (string)value.Trim(); 
} 
} 
public int Age 
{ 
get 
{ 
return age; 
} 
set 
{ 
int v = value; 
age = v > 0 ? v : 0; 
} 
} 
} 
} 
using System; 
using System.Collections.Generic; 
using System.Text;

4.2.2测试项目

新建一个类库项目,命名为 StudentTest,使之生成 Test.dll单元测试程序集。在引用里将nunit.framework.引用进来。

StudentTest源码如下:

studentTest.cs

namespace Student 
{ 
using NUnit.Framework; 
[TestFixture] 
public class StudentTest 
{ 
[Test] 
public void RunTest() 
{ 
Student s = new Student("Wang", 20); 
Console.WriteLine("Student " + s.Name + "'s age is " + s.Age); 
} 
} 
} 

界面如图4.2.2所示。

图4.2.1

编译生成 Test.dll程序集(作为单元测试用)。

打开Nunit,将Test.dll添加到Nunit中,并且点击Run,则会得到如下图4.2.2所示。

4.3建立vss数据库

建立新用户:tanqiyu; 密码:123; 并建立新数据库:datebase

之后,把待测程序check in到数据库中去,如图4.3。

图4.2.2

图4.3

4.4 配置nant 的 default.build 文件

添加环境变量:将 D:\Student\nant-0.85\bin;C:\Program Files\Microsoft FxCop 1.35 加入到环境变量path中去。

建立default.build文件,供nant调用:

<?xml version="1.0" encoding="gb2312" ?> 

<project name="TestRemote" default="run" basedir=".">

<property name="Solution.Filename" value="D:\Student\Student\StudentTest\StudentTest.cs" />

<property name="Solution.Configuration" value="DEBUG" />

<property name="Build.OutputFolder" value="D:\Student"/>

<property name="Solution.Filename1" value="D:\Student\Student\Student\Student.cs" />

<property name="Solution.Configuration1" value="DEBUG" />

<property name="Build.OutputFolder1" value="D:\Student"/>

<target name="t1">

<vssget user="tanqiyu" password="123" localpath="D:\Student" dbpath="D:\datebase\srcsafe.ini" path="$/" />

</target>

<target name="t2" depends="t1">

<csc target="library" output="Student.dll"debug="true">

<sources>

<include name="D:\Student\Student.root\Student\Student\Student.cs" />

</sources>

</csc>

<csc target="library" output="StudentTest.dll" debug="true">

<sources>

<include name="D:\Student\Student.root\Student\StudentTest\StudentTest.cs" />

</sources>

<references>

<include name="C:\Program Files\NUnit-Net-2.0 2.2.8\bin\nunit.framework.dll" />

<include name="D:\Student\Student.dll"/>

</references>

</csc>

</target>

<target name="run">

<call target="t1" />

<call target="t2" />

<call target="nunit" />

<call target="fxcop" />

</target>

<target name="nunit" depends="t2">

<nunit2>

<formatter type="Plain" />

<formatter type="Xml" usefile="true" extension=".xml" outputdir="." />

<test assemblyname=" D:\Student\Student\StudentTest\bin\Debug\StudentTest.dll" />

</nunit2>

<nunit2report todir="D:\Student">

<fileset>

<include name="StudentTest.dll-results.xml" />

</fileset>

</nunit2report>

</target>

<target name="fxcop">

<exec program="fxcopcmd" commandline="/f:D:\Student\Student.dll /o:test.xml" />

</target>

</project>

Nant运行结果如下图:

图4.4.1

构建成功后,察看各个结果:

(1) StudentTest.dll-results.xml:为Nunit生成的xml文件。

(2)Index.html: 是将test.dll-results.xml”样式“成 html的结果。

(3)StudentTest.xml: 为 FxCop生成的代码规范检测文件

4.5 配置CC.NET的ccnet.config文件

<cruisecontrol>

<project name="Student">

<webURL>http://localhost/ccnet</webURL>

<triggers>

<intervalTrigger seconds="5"/>

</triggers>

<sourcecontrol type="vss" autoGetSource="true">

<ssdir>D:\datebase</ssdir>

<executable>C:\Program Files\Microsoft Visual SourceSafe\ss.exe</executable>

图4.4.2

图4.4.3

<project>$/</project> 

<username>tanqiyu</username>

<password>123</password>

</sourcecontrol>

<tasks>

<nant>

<executable> D:\Student\nant-0.85\bin\nant.exe</executable>

<baseDirectory>D:\Student</baseDirectory>

<buildFile>default.build</buildFile>

<targetList>

<target>run</target>

</targetList>

<buildTimeoutSeconds>280</buildTimeoutSeconds>

</nant>

</tasks>

<modificationDelaySeconds>15</modificationDelaySeconds>

</project>

</cruisecontrol>

运行cc.net结果如下图4.5所示。

图4.5

至此,持续集成环境搭建成功。

相关文章

为什么要做持续部署?
剖析“持续交付”:五个核心实践
集成与构建指南
持续集成工具的选择-装载
相关文档

持续集成介绍
使用Hudson持续集成
持续集成之-依赖管理
IPD集成产品开发管理
相关课程

配置管理、日构建与持续集成
软件架构设计方法、案例与实践
单元测试、重构及持续集成
基于Android的单元、性能测试
 
分享到
 
 


集成与构建指南
项目管理:Maven让事情变得简单
持续集成工具hudson
持续集成
Maven权威指南
程序集(UML中的包)之间循环
更多...   


产品发布管理
配置管理方法、实践、工具
多层次集成配置管理
使用CC与CQ进行项目实践
CVS与配置管理
Subversion管理员


海航股份 重构及持续集成
电研华源 设计原理、建模与重构
软件配置管理日构建及持续集成
单元测试、重构及持续集成
中国软件研发中心 单元测试与重构
单元测试、重构和持续集成实践
罗克韦尔 C++单元测试+重构+Gtest
更多...