我们用一个实例CISample来说明怎么配置CC.Net、VSS等。

作者:无名    it人知识库   2020-02-12 00:00:00

我们用一个实例CISample来说明如何配置CC.Net、VSS等。

持续集成服务器源代码管理器配置:

从程序里面选择Microsoft Visual SourceSafe Administration运行源代码管理程序:

我们在磁盘上建立一个目录来作为源代码管理器的数据库目录(例:c:\vsswoker),从文件菜单里新建数据库,浏览到新建的目录下,创建一个名叫CISample的目录:

使用默认的CISample作为连接名字:

选择版本控制模型之后,CISample创建就完成了:

完成之后从Users菜单里面选择新建用户,添加参与这个项目的所有用户,用户可以是只读属性的:

最后共享VSSWorker目录:

同时设置相关人员的访问权限。

实例目录结构准备:

我们在开发用的机器上建立一个项目文件夹(例:Projects),用来存放项目,再建立一个库文件夹(例:Libs),用来存放其他需要引用的库文件和工具,比如NUnit等。将这两个目录用Subst命令映射成2个独立的盘符(例:subst p: c:\Projects, subst l: c:\Libs)。

VS2005源代码管理器配置:

从VS2005的工具菜单选择选项,展开源代码管理选择插件选择,VSS可以支持文件共享方式和Internet方式

新建一个项目:

打开VS2005,新建一个类库项目,位置选择映射的项目文件夹盘符,取名为CISample,同时创建解决方案目录,删除自动创建的Class1.cs文件。在解决方案上点击右键从菜单中选择将解决方案添加到源代码管理器:

在添加SourceSafe数据库向导中,选择连接到已存在的数据库:

在位置处输入\\CIServer\VSSWorker\CISample:

后面的连接名字使用默认的就可以了。然后使用前面建立的用户和密码登录:

出现添加到SourceSafe对话框,直接点击OK,随后的确认对话框选择Yes:

开始往源代码管理器添加文件:

添加完成之后,解决方案、项目以及文件前面都加了一把小锁:

在解决方案上点击右键,选择添加新项目,添加一个新的名为CISampleTest的类库项目,这个项目用于单元测试:

为这个项目添加CISample项目引用和NUnit的引用。

我们使用NUnit网站上Quick Start的例子。

在CISample项目上点击右键,添加一个类,命名为Account,然后输入下面的代码:

using System;

using System.Collections.Generic;

using Syste.Text;

namespace CISample

{

public class Account

{

private float balance;

public void Deposit(float amount)

{

balance+=amount;

}

public void Withdraw(float amount)

{

balance-=amount;

}

public void TransferFunds(Account destination, float amount)

{

}

public float Balance

{

get{ return balance;}

}

}

}

在CISampleTest项目上点右键,新建一个类,命名为AccountTest,然后输入下面的代码:

using System;

using System.Collections.Generic;

using Syste.Text;

using NUnit.Framework;

namespace CISampleTest

{

[TestFixture]

public class AccountTest

{

[Test]

public void TransferFunds()

{

Account source = new Account();

source.Deposit(200.00F);

Account destination = new Account();

destination.Deposit(150.00F);

source.TransferFunds(destination, 100.00F);

Assert.AreEqual(250.00F, destination.Balance);

Assert.AreEqual(100.00F, source.Balance);

}

}

}

现在build一次,通过。用Nunit-gui打开CISampleTest.dll,点击Run,看到下面的结果:

出错了,测试没有通过,现在不着急让它通过,先签入到源代码管理器中。

配置CC.Net:

在持续集成服务器上创建一个文件夹CIWorker,用来存放项目文件,再在下面创建一个CISample文件夹。

进入CC.Net的webdashboard目录,用记事本打开web.config文件进行编辑,找到xslReportBuildPlugin,添加msbuild的report插件,因为我们使用msbuild所以就要注释掉NAnt的report插件,Fitness以后再写文章介绍,所以也注释掉:

<xslReportBuildPlugin description="MSBuild Output" actionName="MSBuildOutputBuildPlugin" xslFileName="xsl\msbuild.xsl" />

<xslReportBuildPlugin description="NUnit Details" actionName="NUnitDetailsBuildReport" xslFileName="xsl\tests.xsl" />

<xslReportBuildPlugin description="NUnit Timings" actionName="NUnitTimingsBuildReport" xslFileName="xsl\timing.xsl" />

<!-- <xslReportBuildPlugin description="NAnt Output" actionName="NAntOutputBuildReport" xslFileName="xsl\NAnt.xsl" /> -->

<!-- <xslReportBuildPlugin description="NAnt Timings" actionName="NAntTimingsBuildReport" xslFileName="xsl\NAntTiming.xsl" /> -->

<xslReportBuildPlugin description="FxCop Report" actionName="FxCopBuildReport" xslFileName="xsl\FxCopReport.xsl" />

<xslReportBuildPlugin description="NCover Report" actionName="NCoverBuildReport" xslFileName="xsl\NCover.xsl" />

<xslReportBuildPlugin description="Simian Report" actionName="SimianBuildReport" xslFileName="xsl\SimianReport.xsl"/>

<!-- <xslReportBuildPlugin description="Fitnesse Report" actionName="FitnesseBuildReport" xslFileName="xsl\FitnesseReport.xsl"/> -->

进入CC.Net的Server目录,创建一个名为MapDriver.bat的批处理文件:

subst p: /d

subst l: /d

subst p: c:\CIWorker

subst l: c:\tools

然后用记事本打开ccnet.config文件进行编辑:

<cruisecontrol>

<project>

<name>CISample</name>

<triggers>

<intervalTrigger seconds="60"/>

</triggers>

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

<modificationDelaySeconds>2</modificationDelaySeconds>

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

<ssdir>\\CIServer\VSSWorker\CISample</ssdir>

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

<project>$/CISample.root/CISample</project>

<username>tubo</username>

<password>******</password>

<workingDirectory>c:\CIWorker\CISample</workingDirectory>

</sourcecontrol>

<publishers>

<xmllogger logDir="log" />

</publishers>

</project>

</cruisecontrol>

保存之后,用浏览器打开http://localhost/ccnet,应该就可以看到:

点击CISample就可以看到CISample的日志了,不过目前还只能看到从VSS获取代码的日志,还没有build日志,在ccnet.config文件中添加如下红色内容:

<cruisecontrol>

<project name="CISample">

<name>CISample</name>

<triggers>

<intervalTrigger seconds="60"/>

</triggers>

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

<modificationDelaySeconds>2</modificationDelaySeconds>

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

<ssdir>\\CIServer\VSSWorker\CISample</ssdir>

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

<project>$/CISample.root/CISample</project>

<username>tubo</username>

<password>******</password>

<workingDirectory>c:\CIWorker\CISample</workingDirectory>

</sourcecontrol>

<tasks>

<exec>

<executable>c:\CCNet\Server\MapDriver.bat</executable>

</exec>

<msbuild>

<executable>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe</executable>

<workingDirectory>p:\CISample</workingDirectory>

<projectFile>CISample.sln</projectFile>

<buildArgs>/noconsolelogger /p:Configuration=Debug /v:diag</buildArgs>

<targets>ReBuild</targets>

<timeout>10000</timeout>

<logger>C:\CCNET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>

</msbuild>

</tasks>

<publishers>

<xmllogger logDir="log" />

</publishers>

</project>

</cruisecontrol>

点击Dashboard页面上的Force按钮强制build,然后点击CISample查看Build日志,可以看到msbuild的输出日志,继续修改ccnet.config,添加NUnit的配置:

<cruisecontrol>

<project>

<name>CISample</name>

<triggers>

<intervalTrigger seconds="60"/>

</triggers>

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

<modificationDelaySeconds>2</modificationDelaySeconds>

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

<ssdir>\\CIServer\VSSWorker\CISample</ssdir>

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

<project>$/CISample.root/CISample</project>

<username>tubo</username>

<password>*******</password>

<workingDirectory>c:\CIWorker\CISample</workingDirectory>

</sourcecontrol>

<tasks>

<exec>

<executable>c:\CCNet\Server\MapDriver.bat</executable>

</exec>

<msbuild>

<executable>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe</executable>

<workingDirectory>p:\CISample</workingDirectory>

<projectFile>CISample.sln</projectFile>

<buildArgs>/noconsolelogger /p:Configuration=Debug /v:diag</buildArgs>

<targets>ReBuild</targets>

<timeout>10000</timeout>

<logger>C:\CCNET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>

</msbuild>

<nunit>

<path>l:\nunit\nunit-console.exe</path>

<assemblies>

<assembly>p:\CISample\CISampleTest\bin\Debug\CISampleTest.dll</assembly>

</assemblies>

</nunit>

</tasks>

<publishers>

<xmllogger logDir="log" />

</publishers>

</project>

</cruisecontrol>

再次点击Force按钮,查看日志,可以看到这次build失败了,是单元测试没有通过。

CISample项目,打开CISample项目的Account.cs文件,完成TransferFunds方法:

public void TransferFunds(Account destination, float amount)

{

destination.Deposit(amount);

Withdraw(amount);

}

重新生成解决方案,然后运行NUnit,可以看到测试通过了,将修改的代码签入到源代码管理器中,等一会打开dashboard页面,点击CISample查看日志,可以看到已经自动Build了一次:

下面介绍如何配置FxCop、NCover、Simian。因为CCNet没有支持FxCop等的task,所以只能在msbuild中配置FxCop等(对于NUnit,CCNet建议也在msbuild或NAnt里面配置)。

进入到CIWorker的CISample目录下面,创建一个名为CISample.FxCop的文本文件,输入如下内容:

<xml version="1.0" encoding="utf-8">

<FxCopProject Version="8.0" Name="CISample">

<ProjectOptions>

<SharedProject>True</SharedProject>

<Stylesheet Apply="False">L:\FxCop\Xml\FxCopReport.Xsl</Stylesheet>

<SaveMessages>

<Project Status="Active, Excluded" NewOnly="False" />

<Report Status="Active" NewOnly="False" />

</SaveMessages>

<ProjectFile Compress="True" DefaultTargetCheck="True" DefaultRuleCheck="True" SaveByRuleGroup="" Deterministic="True" />

<EnableMultithreadedLoad>True</EnableMultithreadedLoad>

<EnableMultithreadedAnalysis>True</EnableMultithreadedAnalysis>

<SourceLookup>True</SourceLookup>

<AnalysisExceptionsThreshold>100</AnalysisExceptionsThreshold>

<RuleExceptionsThreshold>10</RuleExceptionsThreshold>

<Spelling Locale="en-us" />

<VersionAware>False</VersionAware>

<OverrideRuleVisibilities>False</OverrideRuleVisibilities>

<CustomDictionaries SearchFxCopDir="True" SearchUserProfile="True" SearchProjectDir="True" />

</ProjectOptions>

<Targets>

<Target Name="P:\CISample\CISample\bin\Debug\CISample.dll" Analyze="True" AnalyzeAllChildren="True" />

</Targets>

<Rules>

<RuleFiles>

<RuleFile Name="L:\FxCop\Rules\DesignRules.dll" Enabled="True" AllRulesEnabled="True" />

<RuleFile Name="L:\FxCop\Rules\GlobalizationRules.dll" Enabled="True" AllRulesEnabled="True" />

<RuleFile Name="L:\FxCop\Rules\InteroperabilityRules.dll" Enabled="True" AllRulesEnabled="True" />

<RuleFile Name="L:\FxCop\Rules\MobilityRules.dll" Enabled="True" AllRulesEnabled="True" />

<RuleFile Name="L:\FxCop\Rules\NamingRules.dll" Enabled="True" AllRulesEnabled="True" />

<RuleFile Name="L:\FxCop\Rules\PerformanceRules.dll" Enabled="True" AllRulesEnabled="True" />

<RuleFile Name="L:\FxCop\Rules\PortabilityRules.dll" Enabled="True" AllRulesEnabled="True" />

<RuleFile Name="L:\FxCop\Rules\SecurityRules.dll" Enabled="True" AllRulesEnabled="True" />

<RuleFile Name="L:\FxCop\Rules\UsageRules.dll" Enabled="True" AllRulesEnabled="True" />

</RuleFiles>

<Groups />

<Settings />

</Rules>

<FxCopReport Version="8.0" />

</FxCopProject>

创建一个名为CISample.msbuild的文本文件,输入如下内容:

<Project DefaultTargets="ReBuild" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

<Target Name="ReBuild">

<MSBuild Projects="CISample.sln" Targets="Clean;ReBuild" />

<Delete Files="CISample.FxCop.xml;TestResult.xml;Coverage.Xml;simian.xml" />

<Exec Command="L:\FxCop\FxCopCmd.exe /p:p:\CISample\CISample.FxCop /o:P:\CISample\CISample.FxCop.xml" WorkingDirectory="L:\FxCop" />

<Exec Command="L:\Simian\simian-2.2.8.exe -recurse=*.cs -formatter=xml:simian.xml" WorkingDirectory="P:\CISample" IgnoreExitCode="true" />

<Exec Command="L:\NCover\NCover.Console.exe //q //w P:\CISample L:\Nunit\nunit-console.exe P:\CISample\CISampleTest\bin\Debug\CISampleTest.dll" WorkingDirectory="P:\CISample" IgnoreExitCode="true" Timeout="10000000" />

</Target>

</Project>

同时修改ccnet.config文件:

<cruisecontrol>

<project>

<name>CISample</name>

<triggers>

<intervalTrigger seconds="60"/>

</triggers>

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

<modificationDelaySeconds>2</modificationDelaySeconds>

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

<ssdir>\\CIServer\VSSWorker\CISample</ssdir>

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

<project>$/CISample.root/CISample</project>

<username>tubo</username>

<password>******</password>

<workingDirectory>c:\CIWorker\CISample</workingDirectory>

</sourcecontrol>

<tasks>

<exec>

<executable>c:\CCNet\Server\MapDriver.bat</executable>

</exec>

<msbuild>

<executable>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe</executable>

<workingDirectory>p:\CISample</workingDirectory>

<projectFile>CISample.msbuild</projectFile>

<timeout>10000</timeout>

<logger>C:\CCNET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>

</msbuild>

<nunit>

<path>l:\nunit\nunit-console.exe</path>

<assemblies>

<assembly>p:\CISample\CISampleTest\bin\Debug\CISampleTest.dll</assembly>

</assemblies>

</nunit>

<merge>

<files>

<file>P:\CISample\*.FxCop.xml</file>

<file>P:\CISample\Coverage.Xml</file>

<file>P:\CISample\simian.xml</file>

</files>

</merge>

</tasks>

<publishers>

<xmllogger logDir="log" />

</publishers>

</project>

</cruisecontrol>

再次点击Force按钮,查看CISample的最新build日志可以看到FxCop、NCover都有日志产生:

NCover的覆盖率为100%,FxCop的输出报表如图:

我们复制一个TransferFunds方法为TransferFunds1:

public void TransferFunds1(Account destination, float amount)

{

destination.Deposit(amount);

Withdraw(amount);

}

对这个方法不写单元测试,再次签入代码,可以看到覆盖测试率为85%了。然后我们把Account类重新拷贝一份命名为Account1,再次签入源代码管理器,过一会查看CISample的日志,会看到Simian报告了代码重复的行数。

至此,DotNet持续集成环境搭建和配置基本完成了。

it人知识库 该篇文章地址:https://m.itpeo.net/12806/3708359.html

Tag:我们咱们一个实例来说来讲怎么怎样配置



我要分享:

  • 微信
  • QQ好友
  • QQ空间
  • 新浪微博


热门推荐

java 框架

java 框架

  A 代码生成器(开发利器);  B 阿里数据库连接池drui... ...

MINA学习笔记四——第三章Session

MINA学习笔记四——第三章Session

第四章 会话 会话是MINA的核心:每次一个客户端连接到服务器,一个新的会话将被创建,而且该会话在客户端连... ...

MINA学习笔记三——第三章 IoService

MINA学习笔记三——第三章 IoService

第三章 IoService        一个... ...

sql 语句使用

sql 语句使用

1. 有一张表t_stu;其中三个字段:name,gender,grade;要求用一条sql语句查出男生前5名和女生前五... ...

oracle安装及体系结构

oracle安装及体系结构

1. 安装 数据库名:sid (系统标识符) + 后缀 10G过后,安装过程中要求修改SYS(默认manag... ...

Struts2系列之一:构建struts2项目

Struts2系列之一:构建struts2项目

Struts2系列之二:页面传值 Struts2系列之三:注解式Action 1. 新建一个Mave... ...

Page_Load()

Page_Load()

Page_Load,即页面载入要执行的事件; Page_Load的执行分为两种情况; 1.Page_Load事件的... ...

值类型与引用类型(Stuct---Class)

值类型与引用类型(Stuct---Class)

值类型有:Int Double Float Decimal Boolean Byte Char Single Enum ... ...

使用存储过程操作数据库(实现增删改查)

使用存储过程操作数据库(实现增删改查)

使用存储过程操作数据库    添加数据: --创建一个存储过程,向表中插入一条数据 crea... ...

使用二进制协议 (附源码)

使用二进制协议 (附源码)

使用二进制协议 (附源码) 在网络上,交互的双方基于TCP或UDP进行通信,通信协议的格式通常分为两类:文本消息... ...

soap消息拦截器SOAPHandler【handler-chain.xml】

soap消息拦截器SOAPHandler【handler-chain.xml】

SOAP handler is a SOAP message interceptor, which is able... ...

快码表类库DataDictionary

快码表类库DataDictionary

 代码没什么难度,主要是学习这种基础数据使用思想。   import java.uti... ...

C#实现RTP数据包传输参照RFC3550

C#实现RTP数据包传输参照RFC3550

C#实现RTP数据包传输参照RFC3550 闲暇时折腾IP网络视频监控系统,需要支持视频帧数据包在网络内的传输。... ...

Synchronizer--CyclicBarrier-关卡

Synchronizer--CyclicBarrier-关卡

package T; import java.io.IOException; import ja... ...

闭锁--CountDownLatch

闭锁--CountDownLatch

Player class: package T; import java.util.concurren... ...

Editext 设置action

Editext 设置action

<EditText       &n... ...

中国天气网

中国天气网

http://www.weather.com.cn/static/html/legend.shtml ... ...

imagebutton显示文字

imagebutton显示文字

import android.widget.LinearLayout; import a... ...

两个ERP 库存调拨

两个ERP 库存调拨

(A) ERP 负责线上销售,公司为扩大规模,发展线下实体 采用另一套ERP(B)   A 和B ... ...

oracle中日期格式的转换

oracle中日期格式的转换

在oracle中可以对任意类型的日期进行格式转换如下例子: update a001 set a001011=... ...

最新IT资讯

必填

◎已有 0 人评论


电脑版

版权所有:IT人知识库 m.itpeo.net

返回顶部

本网站部分内容来自互联网,版权归原作者所有,文章内容仅代表原作者个人观点,如有侵权请联系我们删除