持续集成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。
图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
至此,持续集成环境搭建成功