如何用CruiseControl.Net来进行持续化集成(转)

本文的目的:

    本文总结了过去一年中使用CruiseControl.Net来对工作流程进行持续化集成的经验教训,详细地讲述安装,配置,使用CruiseControl.Net的具体步骤,希望通过阅读本文,能理解和掌握使用CruiseControl.Net的基本使用技巧,用工具来改善工作流程和提高工作效率。

什么是持续化集成

    首先,我们先搞清楚什么是持续化集成?它对我们的日常工作有什么样的帮助?在过去几年中,敏捷已经是一个非常热门的话题,它高效的工作方式和快速的需求应对能力,赢得了很多中小软件厂商的关注。那么敏捷除了一些经常谈论到编程思维和迭代的开发模式等,其实还部分依赖于好的改善工作流程的工具。持续化集成工具便是服务于敏捷软件开发的一个系列。它主要将原本分散,无序的工作流程,通过工具软件有机的组织起来,并且在组织的过程中,参与开发设计测试的各个部门的人员都能从中获取到自动化方面的优惠。使得团队的工作效率大大提升。

    CruiseControl.Net是什么?

    上面讲解了什么是持续化集成,那CruiseControl.Net就是一款由ThoughtWorks公司提供给我们的轻量级的持续化集成工具。它能够将代码版本控制,单元测试,代码规范检查,项目的发布部署等工作步骤有机的组织起来,并且利用其调度性可作自动化处理,它还有强大的日志记录功能,能将集成结果及时地反馈给项目管理人员和项目开发人员。在下文中凡是用到CruiseControl.Net均用CC.Net来代替。下面是CC.Net的工作流程图

如何安装CC.Net

    CC.Net是一款开源软件,它的官方主页是: http://confluence.public.thoughtworks.org/display/CCNET/Welcome+to+CruiseControl.NET

    打开它的主页,便能看出他的官方采用另外一款非常出色的团队协作平台:Confluence,用它结合jira Bug管理系统,也能极大限度的提高团队协作能力,有关他们的介绍请访问:http://www.jira.com/ 。好了,返回来继续介绍CC.Net,当前官方已经发布了最新的CruiseControl.NET-1.3.0.2918,在首页的release栏中,便可以找到下载最新版CC.Net的连接,它是一款开源软件,你也可以在http://www.sf.net中找到它的源码和安装文件。如果你就是想使用CC.Net直接下载exe文件即可。下载后,在本地的安装过程如下:

image

    1.双击CruiseControl.NET-1.3-Setup.exe程序,打开软件安装界面,如下:
image

    2.一直点击Next,选择软件安装路径,等待软件安装完成,界面如下:
     image

    3.软件安装完成之后,在系统windows服务中将增加名为CruiseControl.Net Server的系统服务,如下:

image

    注意,默认情况该服务是出于未启动状态的。

因为CC.Net是一个集成持续工具在部署CC.Net之前,单独靠它自己是没有实际意义的,所以在部署配置CC.Net之前,您需要事先准备好并且安装下述软件:

    1.代码版本管理工具如VSS
    2.代码构建工具,如果您是vs.net的用户,强烈建议不要使用NAnt,配置起来比较麻烦,建议使用MsBuild来做构建工具。MsBuild是随.Net FrameWork 2.0一起安装的,所您需要在CC.Net服务器上安装.Net FrameWork 2.0或者以上版本。
    3.代码规范检查工具,.Net用户推荐使用FxCop.exe,下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyID=3389f7e4-0e55-4a4d-bc74-4aeabb17997b&displaylang=en,很不幸的是,它原来的官方主页 http://code.msdn.microsoft.com/GotDotNet.aspx 关闭了,在新的站点中,我没有搜索到它。
    4.单元测试工具:Nunit,官方主页:http://sourceforge.net/projects/nunit
    5.发布部署工具,如果是asp.net网站,可以使用ASP.NET 编译工具 (Aspnet_compiler.exe),但我感觉它不好用,于是我自己实现了一系列的代码发布,FTP上传,XCopy安装等组件,在后面会提到。

    除了上述,CC.Net还支持NCover,Simian和Fitness,我没有具体应用,便不多讲。

如何配置和部署

    假定上述的几个工具已经成功安装,下面就用一个项目来演示一下如何实现自动化构建,单元测试,代码规范检测,自动发布部署。并且可以演示项目管理和开发人员通过什么样的手段能及时了解持续集成化的结果。

    在演示制作之前,我们先来看一下当前的持续集成环境。

image
    首先,我们创建用于演示的解决方案Jillzhang.DailyBuild,其中包括四个项目: 
image

    建立好解决方案之后,将其添加到VSS项目管理器中。层次结构如下:

image

下面我让我们看一下,如何配置CC.Net使其工作起来。 

    1.在CC.Net服务器上,点击开始菜单,在所有程序中选择CruiseControl.Net,打开CruiseControl.NET Config配置文件。

    2.CC.Net支持同时监控和集成多个解决方案,每个解决方案在CC.Net中被称为1个Project.,在CruiseControl.NET Config中1个Project被一个<project>元素来描述。当然我们还要为每个Project指定名称和工作目录和日志存放目录。阅读CC.Net的文档,你可以了解<project>元素的一些属性和子元素。这里我只讲述一些我用到的。
    name ,如<project name="Project1">表示1个名称为Project1的新工程,这个名称在日后会作为项目的标识显示给查看报告的用户。比如显示在cctray上或者在网站doashboard上进行显示。还有一个比较重要的子元素<workingDirectory>这个元素非常类似于WCF配置中的<baseAddress>,用它来指示工程的工作目录,也就是从版本管理器上下载文件的根目录。除了这些我们还需要设定子元素<artifactDirectory >它用来指示日志记录的保存位置。CC.Net为我们提供了几种版本管理方式,可以用<labeler>来指定使用哪种类型的版本标签,如Date Labeller,Default Labeller等,具体也可以查阅文档。我们这里使用Date Laberller,所以设置为<labeler type="dateLabeller"/>。下面可以设置源代码管理器,CC.Net支持目前绝大多数主流的版本控制工具,如CVS,VSS,Rational ClearCase,VSTS, Alienbrain等十几种。我们这里使用VSS,根据上文VSS和解决方案的配置,我们这里设置为: 


    将autoGetSource设置为true,CC.Net会通过监视VSS中代码的版本变化,自动从版本管理器中获取源代码。Project是要使用的解决方案在vss中的路径,值为如下:


    Username为访问vss的用户名,password为访问vss的密码。ssdir是 vss代码库的共享路径,我这里为\\192.168.1.200\vss\。如果将cleanCopy设置为true,那么CC.Net每次获取最新文件的时候是否完全覆盖更新文件。

    当前,我们的配置文件为:


    设置好VSS后,我们可以启动CC.Net了,方法如下,打开Services.Msc,找到CruismControl.Net Server服务,在启动之前,需要先解决一下可能最影响情绪的问题:我们知道windows services默认情况下是用本地系统账户运行的,可一般情况下我们会在当前操作用户下设置对vss共享目录的访问权限,比如当前windows运行账户为administrator,那么我们在administrator中通过net use设置对\\192.168.1.200\vss\的访问,也可以通过Source Safe Client打开该代码库,可这往往是一个烟雾弹,当我们在CC.Net中试图用服务来访问\\192.168.1.200\vss\ 的时候,系统服务账户并没有与该共享目录建立会话,所以会拒绝访问\\192.168.1.200\vss\,连访问权限都没有,更不用说获取代码了。所以首先要注意的是启动前,先设置服务的运行账户:

只有这样,我们才能进行下面的工作:

    启动CruismControl.Net Server服务,重新签出,嵌入一下解决方案,稍等一段时间,我们便会在工作目录E:\DailyBuild中看到自动获取过来的文件。还要值得注意的一点是在log目录中最好事先创建好buildlogs,如果您在启动CrusimControl.Net Server服务的时候有错误出现,比如在启动的时候总是出现:


    很可能得情况就是上面的配置有错误,您可以通过下面两种方式来确定服务到底出现了什么样的问题:

    1.按照提示,在事件查看器中查看错误,如: 

    2.您还可以到CrusimControl.Net Server的应用程序目录查找名为ccnet.log的文件,里面有CC.Net详细的操作步骤。

    如果没有启动错误并且在ccnet.log中没有明显的异常,可以打开监视网站来查看集成结果,监视网站的地址是在<project>元素上通过设置webURL属性来完成的,我们打开这个网址,如图:

image

    当Last Build Status为Success的时候表示项目集成成功,此时点击项目名,可以查看具体的集成结果:

    如果调用MsBuild来对代码进行生成,调用FxCop进行代码规范检查,和调用NUnit进行单元测试集成,还需要对CC.Net进行下一步的配置。

    代码规范检侧工具FxCop不能被CC.Net直接使用,它必须附加到MsBuild.Exe的命令行中,有关如何使用MSBuild,可以参考msdn,不做具体介绍。为此我们创建一个用于生成并检查代码规范的任务,CC.Net支持自定义任务,方法是:使用Task中的Executable Task。

首先在工作目录,创建一个用于msbuild参数的DailyBuild.msbuild文件,文件内容如下:

image
    这个MsBuild选项会使得msbuild.exe在生成完成之后调用工作目录中的exeu.bat文件,exeu.bat中是关于使用FxCop方法的,内容如下:


    目的就是通过调用FxCop安装目录下的FxCopCmd命令行工具,对指定的程序集进行规范性检查,上述代码中,E:\DailyBuild\Jillzhang.DailyBuild.FxCop是事先生成好的FxCop项目文件,生成办法是打开FxCop 可视化界面,添加target,并保存到此为位置即可,如图:

    并保存到E:\DailyBuild\Jillzhang.DailyBuild.FxCop

    添加能生成代码并且检测代码规范性的配置如下:

    注意,buildTimeoutSeconds是生成操作的超时时间,还有最好设置/p:Configuration=Release,因为这样有利于以后发布。而Merge是将上面各个任务中生成的日志进行合并。

    下面重新签出嵌入,观察集成结果:

    可以看到,已经release成功。

    下面就看一下生成的DailyBuild.FxCop.xml,

    打开看里面的内容便可以发现代码检测结果。

    注:本文属jillzhang  原创,转载请注明出处 ,欢迎访问http://jillzhang.cnblogs.com/来获取最新更新

03 2012 档案

 
摘要: 首先要确定TortoiseGit已找到msysgit,如果先安装msysgit 再装TortoiseGit, 一般TortoiseGit 就会自动的识别。 安装详见TortoiseGit安装教程 设置与查询的方法,这里从开始菜单进入设置。 这是TortoiseGit的设置界面,可以看到用来定位MSysGit的路径。 点“Check now”检查有效性。如果有错的话,就自己设置msysgit的b...阅读全文
posted @ 2012-03-29 14:07 中金黄金 阅读(7) | 评论 (0) 编辑
摘要: 本文在介绍了软件安装和设置后, 写了TortoiseGit 常用的一些功能, 包括: 创建新库 添加文件及文件夹 创建分支 看分支情况及修改log 比较版本差异 合并分支 其他操作: Stash; 忽略文件本文不包括: Git 服务器设置 Push 版本到服务器上 从其他机器上Pull 版本 解决中文字符问题《Pro Git》和TortoiseGit 的帮助文档是两篇很不错的参考文档. 如果时间比...阅读全文
posted @ 2012-03-29 13:48 中金黄金 阅读(11) | 评论 (0) 编辑
摘要: Asp.Net 内置支持成员管理功能,利用这个,你可以非常安全的存储和验证用户信息。 特别当你将成员管理与角色和个性化管理结合在一起,你就能创建一个强大的应用系统。Asp.Net包含一系列类让你访问成员管理和角色相关的功能,你可以通过下面的的链接来了解这些类。 http://msdn.microsoft.com/en-us/library/91f66yxt.aspx Asp.Net的成员管理功能...阅读全文
posted @ 2012-03-29 11:11 中金黄金 阅读(14) | 评论 (0) 编辑
摘要: 如下?12345678<a href="/abc/index.html">home</a><img src="http://images.cnblogs.com/img.png"><script>var link = document.getElementsByTagName('a')[0];var img = document.getElementsByTagName('img')[0];alert(link.getAttribute('href'));al阅读全文
posted @ 2012-03-25 18:35 中金黄金 阅读(1) | 评论 (0) 编辑
摘要: MemberwiseClone 方法创建一个浅表副本,具体来说就是创建一个新对象,然后将当前对象的非静态字段复制到该新对象。如果字段是值类型的,则对该字段执行逐位复制。如果字段是引用类型,则复制引用但不复制引用的对象;因此,原始对象及其复本引用同一对象。 为了实现深度复制,我们就必须遍历有相互引用的对象构成的图,并需要处理其中的循环引用结构。这无疑是十分复杂的。幸好借助.Net的序列化和反序列化机...阅读全文
posted @ 2012-03-22 11:11 中金黄金 阅读(4) | 评论 (0) 编辑
摘要: 首先是下载和安装WebMatrix,下载地址是: www.microsoft.com/web/webmatrix 当你运行WebMatrix时,上面会有好几个选项。如果要创建Umbraco ,选择“Site from Web Gallery”. 选择 “Umbraco” ,安装程序. 系统会提示你安装,点击“I Accept”按钮。 等待安装。 安装成功的,系统会有个成功确认。 ...阅读全文
posted @ 2012-03-21 10:58 中金黄金 阅读(7) | 评论 (0) 编辑
摘要: Umbraco的下载地址: http://umbraco.codeplex.com/ 教程视频: http://umbraco.org/help-and-support/video-tutorials/getting-started/what-is-umbraco 本次环境: 操作系统:win7旗舰版, IIS7,Umbraco 4.6.1 for .NET 4.0,SQL2008 Expre...阅读全文
posted @ 2012-03-21 10:15 中金黄金 阅读(3) | 评论 (0) 编辑
摘要: 你曾经碰到过多少网站需要你登录? 我猜想答案是绝大多数的站点,写这篇文章的目的就是介绍如何利用ASP.NET的验证和授权机制来创建站点,以及如何利用ASP.NET的控件来快速实现登录,用户管理的功能。 当我们要开发一个站点,而且必须实现验证和授权这些需求, 那么我们就会认识到ASP.NET的角色和用户管理功能非常的有用。验证意味着对用户进行检查,在这一步,我们会核查用户的身份信息以确认试图登录的用...阅读全文
posted @ 2012-03-19 14:27 中金黄金 阅读(4) | 评论 (0) 编辑
摘要: 原文:http://www.cnblogs.com/hjf1223/archive/2006/08/27/487890.html在.NET 2.0中,引入了Provider模式后,大大了提高了框架本身的可扩展性。以Membership,Roles,Profile组成的用户管理组件(包括页面个性化信息)就是以这种模式为核心构建起来的,在asp.net 2.0中,利用系统提供的API可以很容易的实现用户管理,角色管理,用户个性化信息的管理。这也是asp.net 2.0的一个重要组成部分,学习使用asp.net 2.0可以考虑从它入手。一、基本结构。用户管理的三个组件是相互关联的,而且在数据设计上也阅读全文
posted @ 2012-03-18 12:27 中金黄金 阅读(5) | 评论 (0) 编辑
摘要: 默认情况下,ASP.NET 成员资格可支持所有 ASP.NET 应用程序。默认成员资格提供程序为SqlMembershipProvider并在计算机配置中以名称AspNetSqlProvider指定。SqlMembershipProvider的默认实例配置为连接到 Microsoft SQL Server 的一个本地实例。在系统盘找到并打开machine.config,找到AspNetSqlMembershipProvider节点: <membership> <providers> <add name="AspNetSqlMembershipProvid阅读全文
posted @ 2012-03-18 12:21 中金黄金 阅读(9) | 评论 (0) 编辑
摘要: asp.net 2.0的Membership组件提供了一组非常简单易用的接口供开发者进行验证用户凭据并管理用户设置(如密码和电子邮件地址),Membership 类可以独自使用,或者与 FormsAuthentication 一起使用,以创建一个完整的 Web 应用程序或网站的用户身份验证系统,它与ASP.NET 登录控件(Login、LoginView、LoginStatus、LoginName和PasswordRecovery相互配合,方便实现用户登录,验证相关的功能。 MSDN上有相应的介绍文章:http://msdn.microsoft.com/en-us/library/ff6483阅读全文
posted @ 2012-03-18 12:13 中金黄金 阅读(4) | 评论 (0) 编辑
摘要: 在.Net framework中有个XslCompiledTransform类,它只能处理XSLT1.0的样式表,微软目前官方也不准备提供对2.0的支持。然而这并不是说,我们就不能在.Net中使用XSLT2.0的新特性,通过第三方提供的类库,可以实现同样的目的。XSLT2.0比起1.0更强大,提供了更方便的方法,以下是2.0中的几个主要改进:支持正则表达式提供更多的函数处理时间,像获取当前时间,格式化时间用户定义函数,xsl:function字符串比较tokenize() 和 matches()方法for … in … returnnext-matchas 属性 ,<xsl:variab阅读全文
posted @ 2012-03-13 10:45 中金黄金 阅读(4) | 评论 (0) 编辑
摘要: XSLT1.0 是W3C标准,主要用于对XML文档的转换,包括将XML转换成HMTL,TEXT或者另外格式的XML文件.XSLT1.0可以与XPATH1.0标准一起使用,XPATH会告诉你要转换的节点而XSLT则提供了一种机制来说明如何实现这种转换。为了将源文档转换成想要的格式, 一个XSLT样式文件往往包含一系列的规则,而要解释这些规则, 需要依赖XSLT处理器,这个处理器实际上就是对XSLT1...阅读全文
posted @ 2012-03-09 12:52 中金黄金 阅读(24) | 评论 (0) 编辑
摘要: 本文的目的: 本文总结了过去一年中使用CruiseControl.Net来对工作流程进行持续化集成的经验教训,详细地讲述安装,配置,使用CruiseControl.Net的具体步骤,希望通过阅读本文,能理解和掌握使用CruiseControl.Net的基本使用技巧,用工具来改善工作流程和提高工作效率。什么是持续化集成 首先,我们先搞清楚什么是持续化集成?它对我们的日常工作有什么样的帮助?在过去几年中,敏捷已经是一个非常热门的话题,它高效的工作方式和快速的需求应对能力,赢得了很多中小软件厂商的关注。那么敏捷除了一些经常谈论到编程思维和迭代的开发模式等,其实还部分依赖于好的改善工作流程的工具。持续阅读全文
posted @ 2012-03-07 16:08 中金黄金 阅读(4) | 评论 (0) 编辑
摘要: FxCop是微软的代码检查工具,测试用的版本是FXCop1.36。 配置步骤: 一 新建FxCop项目文件。 打开FXCop1.36,默认的项目名称是“My FxCop Project”,添加自己的项目文件,引用第三方类库,重要的是设置自己的Rules,然后保存。 二 在CC.Net里配置 <exec> <executable>C:\Program Files (x86)\Micros...阅读全文
posted @ 2012-03-07 15:53 中金黄金 阅读(5) | 评论 (0) 编辑
摘要: StyleCop是微软的代码规范检查工具,如何将这个工具集成到CruiseControl.NET中呢? 一种方式是利用CruiseControl.NET的MSBUILD。 第一步: 新建msbuild.proj, 跟solution文件位于同个目录,它的内容如下: <?xml version="1.0" encoding="utf-8"?><Project xmlns="http://sc...阅读全文
posted @ 2012-03-07 15:35 中金黄金 阅读(3) | 评论 (0) 编辑
摘要: StarTeam是一个流行的源代码管理工具。如何在CruiseControl.NET配置,可以查看它的帮助文档。 配置StarTeam,你只要指定可执行文件,服务器上的项目路径,用户名和密码,还要指定服务器的地址,端口和路径。默认的路径是127.0.0.1,端口是49201,服务器上的项目路径为空。 <sourcecontrol type="starteam"> <executable>...阅读全文
posted @ 2012-03-07 15:23 中金黄金 阅读(8) | 评论 (0) 编辑
摘要: 最近在用CruiseControl.NET实现每日构建,其他配置起来都挺方便,就是在邮件设置上费了不少时间,我用的是CC.NET1.6,这个版本已经支持发送附件,如果使用外部邮箱,记得要把邮箱的smtp功能打开,下面是Mail配置的一个例子:<email mailport="25" includeDetails="TRUE" mailhostUsername="*****@qq.com" mailhostPassword="******" useSSL="FALSE"> <fr阅读全文
posted @ 2012-03-06 18:16 中金黄金 阅读(7) | 评论 (0) 编辑
摘要: 一、桥梁(Bridge)模式桥梁模式是一个非常有用的模式,也是比较复杂的一个模式。熟悉这个模式对于理解面向对象的设计原则,包括"开-闭"原则(OCP)以及组合/聚合复用原则(CARP)都很有帮助。理解好这两个原则,有助于形成正确的设计思想和培养良好的设计风格。我是这样理解的:对一个事物进行抽象,得到了一个行为。比如对Shape进行抽象,得到了Draw的行为。Draw是在哪里实现的?不是在它抽象而来的类Shape,而是在另外一个类实现的。哪个类呢?Drawing类。Draw是从Shape抽象出来的行为,但是不在Shape中予以实现。这就是抽象和实现分离。为什么要这样呢?因为D阅读全文
posted @ 2012-03-01 12:14 中金黄金 阅读(6) | 评论 (0) 编辑
原文地址:https://www.cnblogs.com/Leo_wl/p/2434727.html