CI持续集成

“我的TDD实践”系列之CI持续集成

写在前面:

  我的TDD实践这几篇文章主要是围绕测试驱动开发所展开的,其中涵盖了一小部分测试理论,更多的则是关注工具的使用及环境的搭建,做到简单实践先行,后理论专精的目的。

TDD实践系列文章:

  1.TDD概念篇

  2.CI持续集成

  3.SVN架设篇

  4.NUint测试框架

  5.Mock模拟框架

  6.Inject注入框架

  7.TestCoverage代码覆盖率工具

  8.UMLTool建模工具

  9.SandCastle构建文档

  

简介

  CI(Continuous Integration)持续集成,最重要的服务对象是TDD,它是一个集合概念,包括自动构建build项目,自动分析代码,自动测试,自动邮件报告,自动预编译检查,自动发布等等,这些都围绕一个中心词“Auto”,当然它不能帮您自动完成代码 :)。所有这些操作,直接解放了项目管理者,每日构建集成(Build every day)将会很大程度上提高项目的稳定性,代码的健壮性及随时反馈。

  持续集成经典定义:www.martinfowler.com/articles/continuousIntegration.html

  持续集成是一种能让团队成员友好“集成”(integrate)工作的软件开发实践,通常每个人最少每日“集成”一次,也就是说每天都要进行大量的“集成”(multiple integrates per day)。每一次集成都被自动构建器(automated build including test)尽可能快的检测集成错误。许多团队开发者发现,这种方法极大的降低了团队简集成的问题,而且能让团队更快的开发出有凝聚力,结合力的软件(cohesive software)。 

                                                                                                                  --- Martin Fowler 

  持续集成拓扑图:

  

  从实用性角度来说,持续集成避免了因为某人突然发生的Bug,导致团队的人员必须等待这个Bug被修复,持续集成每日集成则大大降低了这种事情发生的概率或者控制在一个合理发生Bug的时间内(一个工作日)。

  1. 什么样的集成“频率”才是合理的?

  

  2. 持续集成具体的优势和劣质在哪里?

    2.1. 可能出现的问题:

      2.1.1. 增加了维护CI的成本:起初可能是要在配置环境上花费些功夫,但比起使用效率上以及代码健壮性控制上,则CI更有意义。

      2.1.2. 需求更改过于频繁,功能复杂:TDD开发的一个原则是“尽可能用最简单的代码完成一个需求,不添加额外的功能,如果需求改变,则让测试部通过,然后重构,即不要一次完成将来可能的任务,只注重当前”。

      2.1.3. 增加软硬件成本和团队学习曲线(Study Curve):同第一条定律,学习曲线则可根据团队情况逐渐深化。

      2.1.4. 团队成员将不得不编写测试和构建项目:有了这些团队成员可以只关注编写代码和调试代码,比起修复那些被测试人员发现的bug,更多的利用了Coder的个人才能。(啰嗦一句,本人曾深受过那些莫名其妙的bug所带来的危害,有些还是由于其他人的改动导致的,这样不得不F11跟踪代码来理解Bug产生的流程,绝大多数时刻是极其痛苦的。)

      2.1.5. 旧项目是否能用CI: 即使旧项目中没有单元测试,也可以用CI中的源代码管理等诸多功能。这里除非有绝对的意义,否则也不建议在旧代码的基础上补充单元测试。

    2.2. 应用CI的优势:

      2.2.1. 降低软件风险提高软件的质量:测试代码覆盖率越高,提供的稳定性就越高,建议代码覆盖率80%以上,所谓的二八原则?!

      2.2.2. 增强项目的透明度:集成服务器持续的反馈集成信息,包括集成是否成功,Bug修复的时间,修复Bug的时间等。

      2.2.3. 迅速构建:更快的发现问题,以及要求构建时间平均在1.9分钟左右。

  3. 持续集成相关工具介绍:

    3.1. 源文件管理系统(Source file control system):SVN ,TFS(VSS),Github。。。。

      具体内容请参考,本系列的其他文章:请返回文章前言

    3.2. 持续集成服务端(平台):

      3.2.1. TFS Server:微软一体化解决方案。

      3.2.2. TeamCity:近些年流行起来的CI集成平台,由JetBrains维护。

      3.2.3. CruiseControl.Net: 老旧的平台,脚本配置,06年更新过一回。

    3.3. 单元测试工具:

      MSTest,NUnit

      具体内容请参考,本系列的其他文章:请返回文章前言

    3.4. 代码分析工具:

      FxCop,StyleCop,Ncover

      具体内容请参考,本系列的其他文章:请返回文章前言

    3.5. 其他工具:

      SandCastle文档构建,Mock框架,Inject框架

      具体内容请参考,本系列的其他文章:请返回文章前言

持续集成服务端搭建

  本节主要叙述几种持续集成服务端的搭建及其中一些小的细节上的说明,由于时间原因,没有更深层次的说明更多的功能特性,这确实是不足之处,待今后有时间补充。

  1. CruiseControl.Net(CC.net):

    a) 介绍:Thoughtworks旗下产品,免费,需配置脚本文件。

      官网:http://confluence.public.thoughtworks.org/display/CC/Understanding+the+alternatives+to+CruiseControl

    b) 安装步骤:

i. 下载CCnet:http://sourceforge.net/projects/ccnet/?source=dlp

ii. 点击安装包,进行默认安装。

iii. 安装完之后,如果是默认安装的话,在%Program Files%\CruiseControl.NET\server,找到文件ccnet.config并用记事本打开并编辑。

iv. 网上有很多配置文件,如下是我的配置文件,

    c) 手动运行:在安装程序中启动CruiseControl.Net,验证是否成功。

    d) 日志文件在:D:\CI\ArtifactWork\buildlogs目录下。

    e) 查看相关记录:http://localhost/ccnet(前提是请安装IIS)

    f) 客户端使用CCTry 获取反馈。

  2. TeamCity

    a) 介绍:简而言之,小项目免费,大项目付费。Web配置代替脚本配置。

        官网:http://www.jetbrains.com/teamcity/

     拓扑图:

     b) 安装步骤:

i. 下载:http://www.jetbrains.com/teamcity/download/download_thanks.jsp

ii. 默认安装。(需更改端口防止冲突,选择user account登录)

iii. Web配置:

        1. 配置视频:http://www.jetbrains.com/teamcity/documentation/demos/installation_new/index.html

                   http://www.jetbrains.com/teamcity/documentation/userguide.jsp

        2. TeamCity在线文档:http://confluence.jetbrains.com/display/TCD8/Configuring+General+Settings

        3. 登录配置网页进行相关设置,http://localhost:8011/login.html(安装时,更改了端口号为8011防止冲突)

          3.1. 点击 Create New Project

          3.2. 点击 Create build configuration。(也可先创建一个子项目,然后再新建一个配置)

          3.3. 点击左上角的 Create and attach new VCS root, 然后VCS 类型选择SVN,如下配置:

      

          3.4. 保存之后,继续配置:

             选择自动构建的方式:选择Microsoft Visual Studio,也可选择其他的构建器,如MSBuild。

          3.5. 增加一个Build Feature,这里可暂时不选择,直接跳过此步骤:点击网页右侧的导航栏,选择第4步。

          3.6. 在导航中点击第5步:Build trigger

          3.7. 这里已经完成了基本配置,更多高级选项请参考TeamCity官方资料。

  

  3.Team Foundation Server(TFS)

    a) 介绍:与VS2010集成,一体化解决方案,当然没有免费的午餐。

      官网:http://msdn.microsoft.com/zh-cn/vstudio/ff637362.aspx

        拓扑图:

     b) 安装步骤:

      请参见:http://msdn.microsoft.com/zh-cn/vstudio/ff637362.aspx

      

      

参考资料:

  《Continuous Integration IN .NET》          Marcin Kawalerowicz 

      

 

工程狮必备属性:追新,执着,高内聚低耦合。 
版权声明:凡是没有标注[转载]的,在引用文章时,均要加上本博客地址http://www.cnblogs.com/cuiyansong/。
 

CI持续集成的更多相关文章

  1. 【补充】Gitlab 部署 CI 持续集成

    上一篇:<劈荆斩棘:Gitlab 部署 CI 持续集成> 上一篇所配置的.gitlab-ci.yml: stages: - build - test before_script: - ec ...

  2. GitLab CI持续集成配置方案

    目录 1. 持续集成介绍 1.1 概念 1.2 持续集成的好处 2. GitLab持续集成(CI) 2.1 简介 2.2 GitLab简单原理图 2.3 GitLab持续集成所需环境 2.4 需要了解 ...

  3. [原创]CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接

    近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更多的人在说协同开发.敏捷开发.迭代开发.持续集成和单元测试这些拉风的术语.然而,大都是仅仅听到在说而已,国内 ...

  4. Ubuntu Docker 安装和配置 GitLab CI 持续集成

    相关文章: Ubuntu Docker 简单安装 GitLab 劈荆斩棘:Gitlab 部署 CI 持续集成 目的:在 Ubuntu 服务器上,使用 Docker 安装和配置 GitLab Runne ...

  5. Gitlab CI 持续集成的完整实践

    Gitlab CI 持续集成的完整实践 本着公司团队初创,又在空档期想搞点事情,搭建了私有Gitlab的契机,顺便把持续集成搭建起,实现了对Python服务端代码的单元测试.静态代码分析和接口测试的持 ...

  6. CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接

    原文地址https://www.cnblogs.com/kevingrace/p/5651447.html 近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更 ...

  7. 我的TDD实践---CI持续集成

    “我的TDD实践”系列之CI持续集成 写在前面: 我的TDD实践这几篇文章主要是围绕测试驱动开发所展开的,其中涵盖了一小部分测试理论,更多的则是关注工具的使用及环境的搭建,做到简单实践先行,后理论专精 ...

  8. Git Hooks、GitLab CI持续集成以及使用Jenkins实现自动化任务

    Git Hooks.GitLab CI持续集成以及使用Jenkins实现自动化任务 前言 在一个共享项目(或者说多人协同开发的项目)的开发过程中,为有效确保团队成员编码风格的统一,确保部署方式的统一, ...

  9. 物联网架构成长之路(47)-利用GitLab实现CI持续集成

    0.前言 前段时间,考虑到要练习部署一套CI/CD的系统.一开始考虑到Jenkins,随着这两天的了解,发现最新版的GitLab已经提供有CI/CD集成了.所以本次博客,干脆一步到位,直接用GitLa ...

随机推荐

  1. Android NDK的C++11标准支持

    C++11于Android NDK它已被支持,本文介绍了如何NDK添加C++11支持标准. 在开源项目Cocos2d-x于,他已经加入C++11支持标准. 1.改动Application.mk文件,加 ...

  2. 通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 ‘incorrect string value: '\xF0...

    原文:[原创]通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 'incorrect string value: '\xF0... 这篇blog重点在解决问题,如果你对 ...

  3. Struts2和Struts1的主要区别(完整版)

    Struts1和Struts2的区别和对比: Action 类: • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口,而struts2的Act ...

  4. C# 实现 Hyper-V 虚拟机 管理

    原文:C# 实现 Hyper-V 虚拟机 管理 Hyper-V WMI Provider 工具类如下: "; break; } return status; } } /// <summ ...

  5. Installshield脚本拷贝文件常见问题汇总

    原文:Installshield脚本拷贝文件常见问题汇总 很多朋友经常来问:为什么我用CopyFile/XCopyFile函数拷贝文件无效?引起这种情况的原因有很多,今天略微总结了一下,欢迎各位朋友跟 ...

  6. [译]Java 垃圾回收介绍

    说明:这篇文章来翻译来自于Javapapers 的Java Garbage Collection Introduction 在Java中,对象内存空间的分配与回收是由JVM中的垃圾回收进程自动完成的. ...

  7. 在ubuntu下开发stm32f4-discovery

    前面零散地记录了一些如何安装编译器,调试器等笔记,这里就准备开始着手试一下这整块系统了. 简单不完全地回顾一下所需要安装的软件: 1 编译器 使用的是codesourcey,因为之前有使用过该套编译器 ...

  8. 区域、模板页与WebAPI初步

    区域.模板页与WebAPI初步 一.区域—麻雀虽小,五脏俱全的迷你MVC项目 1.1 Area的兴起 为了方便大规模网站中的管理大量文件,在ASP.NET MVC 2.0版本中引入了一个新概念—区域( ...

  9. ofbiz学习笔记01--多表关联查询

    不管做什么项目,肯定会用到多表关联查询数据,从网络查询得知ofbiz有三种多表关联查询方法 实现一:Screem.xml 中的 section 里,加 <action>, 加 get-re ...

  10. js urlencode , encodeURIComponent

    js 对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent ...