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

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

  1. 什么是持续化集成

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

  1. CruiseControl.Net是什么?

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

 

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

  1. 如何安装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文件即可。下载后,在本地的安装过程如下:

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

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

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

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

     

因为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,我没有具体应用,便不多讲。 

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

  1. 如何配置和部署   

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

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

工具

地址和路径

Visual Studio SouceSafe

本局域网下一台服务器,IP地址192.168.1.200,共享目录:VSS,所以其根路径为: //192.168.1.200//VSS ,用户名user,密码pwd

CC.Net

CC.Net安装在IP地址为:192.168.1.10的服务器上。

单元测试工具NUnit

和CC.Net安装在同一主机

代码规范工具FxCop

和CC.Net安装在同一主机

发布服务器

位于公网的一台服务器,IP假设为200.100.11.15

 

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

项目

项目描述

Jillzhang.DailyBuild.Core

这个是一个公共类库项目,目的是测试类似这样的项目也在构建范围之内。

Jillzhang.DailyBuild.Test

单元测试项目

Jillzhang.DailyBuild.Web

网站项目一

Jillzhang.DailyBuild.Web2

网站项目二

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

下面我让我们看一下,如何配置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和解决方案的配置,我们这里设置为:   

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

< project > $/Jillzhang.DailyBuild.root/Jillzhang.DailyBuild </ project >  

< username > user </ username >  

< password > pwd </ password >  

< ssdir > //192.168.1.200/vss/ </ ssdir >  

< cleanCopy > false </ cleanCopy >  

</ sourcecontrol >  

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

 

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

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

 

< cruisecontrol >  

< project  name ="TestProject"  webURL ="http://127.0.0.1/ccnet/ " >  

< workingDirectory  > E:/DailyBuild </ workingDirectory >  

< artifactDirectory > E:/DailyBuild/Log </ artifactDirectory >  

< labeller  type ="dateLabeller" ></ labeller >  

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

< project > $/Jillzhang.DailyBuild.root/Jillzhang.DailyBuild </ project >  

< username > user </ username >  

< password > pwd </ password >  

< ssdir > //192.168.1.200/vss/ </ ssdir >  

< cleanCopy > false </ cleanCopy >  

</ sourcecontrol >  

</ project >  

</ cruisecontrol >  

设置好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属性来完成的,我们打开这个网址,如图:

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

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

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

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

 

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

< Target  Name ="Build" >  

<!--  Clean, then rebuild entire solution  -->  

< MSBuild  Projects ="Jillzhang.DailyBuild.sln"  Targets ="Clean;Rebuild" />  

<!--  Run FxCop analysis  -->  

< Exec  Command ="exeu.bat"   />  

</ Target >  

</ Project >  

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

cd D:/Program Files/Microsoft FxCop 1.36 

d: 

FxCopCmd /project:E:/DailyBuild/Jillzhang.DailyBuild.FxCop /out:E:/DailyBuild/log/DailyBuild.FxCop.xml 

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

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

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

 

< tasks >  

< exec >   < executable > D:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/MSBuild.exe </ executable >   < baseDirectory > E:/DailyBuild </ baseDirectory >  

< buildArgs > DailyBuild.msbuild /p:Configuration=Release </ buildArgs >  

< buildTimeoutSeconds > 1200 </ buildTimeoutSeconds >  

</ exec  >  

< merge >  

< files >  

< file > E:/DailyBuild/log/Build.FxCop.xml </ file >  

</ files >  

</ merge >  

</ tasks >  

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

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

可以看到,已经release成功。

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

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

源码来自:https://pan.quark.cn/s/7a757c0c80ca 《在Neovim中运用Lua的详尽教程》在当代文本编辑器领域,Neovim凭借其卓越的性能、可扩展性以及高度可定制的特点,赢得了程序开发者的广泛青睐。 其中,Lua语言的融入更是为Neovim注入了强大的活力。 本指南将深入剖析如何在Neovim中高效地运用Lua进行配置和插件开发,助你充分发挥这一先进功能的潜力。 一、Lua为何成为Neovim的优选方案经典的Vim脚本语言(Vimscript)虽然功能完备,但其语法结构与现代化编程语言相比显得较为复杂。 与此形成对比的是,Lua是一种精简、轻量且性能卓越的脚本语言,具备易于掌握、易于集成的特点。 因此,Neovim选择Lua作为其核心扩展语言,使得配置和插件开发过程变得更加直观和便捷。 二、安装与设置在Neovim中启用Lua支持通常十分简便,因为Lua是Neovim的固有组件。 然而,为了获得最佳体验,我们建议升级至Neovim的最新版本。 可以通过`vim-plug`或`dein.vim`等包管理工具来安装和管理Lua插件。 三、Lua基础在着手编写Neovim的Lua配置之前,需要对Lua语言的基础语法有所掌握。 Lua支持变量、函数、控制流、表(类似于数组和键值对映射)等核心概念。 它的语法设计简洁明了,便于理解和应用。 例如,定义一个变量并赋值:```lualocal myVariable = "Hello, Neovim!"```四、Lua在Neovim中的实际应用1. 配置文件:Neovim的初始化文件`.vimrc`能够完全采用Lua语言编写,只需在文件首部声明`set runtimepath^=~/.config/nvim ini...
基于STM32 F4的永磁同步电机无位置传感器控制策略研究内容概要:本文围绕基于STM32 F4的永磁同步电机(PMSM)无位置传感器控制策略展开研究,重点探讨在不使用机械式位置传感器的情况下,如何通过算法实现对电机转子位置和速度的精确估算与控制。文中结合STM32 F4高性能微控制器平台,采用如滑模观测器(SMO)、扩展卡尔曼滤波(EKF)或高频注入法等先进观测技术,实现对电机反电动势或磁链的实时估算,进而完成磁场定向控制(FOC)。研究涵盖了控制算法设计、系统建模、仿真验证(可能使用Simulink)以及在嵌入式平台上的代码实现与实验测试,旨在提高电机驱动系统的可靠性、降低成本并增强环境适应性。; 适合人群:具备一定电机控制理论基础和嵌入式开发经验的电气工程、自动化及相关专业的研究生、科研人员及从事电机驱动开发的工程师;熟悉C语言和MATLAB/Simulink工具者更佳。; 使用场景及目标:①为永磁同步电机驱动系统在高端制造、新能源汽车、家用电器等领域提供无位置传感器解决方案的设计参考;②指导开发者在STM32平台上实现高性能FOC控制算法,掌握位置观测器的设计与调试方法;③推动电机控制技术向低成本、高可靠方向发展。; 其他说明:该研究强调理论与实践结合,不仅包含算法仿真,还涉及实际硬件平台的部署与测试,建议读者在学习过程中配合使用STM32开发板和PMSM电机进行实操验证,以深入理解控制策略的动态响应与鲁棒性问题。
先看效果: https://pan.quark.cn/s/21391ce66e01 企业级办公自动化系统,一般被称为OA(Office Automation)系统,是企业数字化进程中的关键构成部分,旨在增强组织内部的工作效能与协同水平。 本资源提供的企业级办公自动化系统包含了详尽的C#源代码,涉及多个技术领域,对于软件开发者而言是一份极具价值的参考资料。 接下来将具体介绍OA系统的核心特性、关键技术以及在实践操作中可能涉及的技术要点。 1. **系统构造** - **三层构造**:大型OA系统普遍采用典型的三层构造,包含表现层、业务逻辑层和数据访问层。 这种构造能够有效分离用户交互界面、业务处理过程和数据存储功能,从而提升系统的可维护性与可扩展性。 2. **C#编程语言** - **C#核心**:作为开发语言,C#具备丰富的类库和语法功能,支持面向对象编程,适用于开发复杂的企业级应用。 - **.NET Framework**:C#在.NET Framework环境中运行,该框架提供了大量的类库与服务,例如ASP.NET用于Web开发,Windows Forms用于桌面应用。 3. **控件应用** - **WinForms**或**WPF**:在客户端,可能会使用WinForms或WPF来设计用户界面,这两者提供了丰富的控件和可视化设计工具。 - **ASP.NET Web Forms/MVC**:对于Web应用,可能会使用ASP.NET的Web Forms或MVC模式来构建交互式页面。 4. **数据库操作** - **SQL Server**:大型OA系统通常采用关系型数据库管理系统,如SQL Server,用于存储和处理大量数据。 - **ORM框架**:如Ent...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值