持续集成DailyBuild实践

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。

clip_image001

图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所示。

clip_image003

图4.2.1

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

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

4.3建立vss数据库

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

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

clip_image005

图4.2.2

clip_image007

图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运行结果如下图:

clip_image009

图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>

clip_image011

图4.4.2

clip_image013

图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所示。

clip_image015

图4.5

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

你可能感兴趣的:(Build)