原文:http://www.ibm.com/developerworks/cn/linux/l-buildbot/

持续集成(CI)是发扬以下原则的一个软件开发流程:

  • 维护单源存储库
  • 自动化构建过程
  • 实现自测试构建
  • 每个人每天都有贡献
  • 每一份贡献都应用于在一个集成机上构建主线
  • 加快构建过程
  • 在一个相同的生产环境中执行测试
  • 使任何人都可以简单获取最新的可执行文件
  • 每个人都可以看到当前状况
  • 自动化部署

经 Martin Fowler 大力普及,CI 的基本理念就是持续测试并构建每个分支程序和将分支代码合并后的软件。这可以从总体上提高代码库的健康状况。还可以增加与团队成员的交流,并有机会获取对代码整体质量的反馈。人们通常使用这个周期来生成代码覆盖报告和其他统计信息。

Buildbot 类似于其他 CI 系统,有助于自动化这个检查、构建和测试流程。Buildbot slaves 通常运行于不同的平台,比如 Win32、Solaris、Intelx64 等。当一个构建(build)中断时,Buildbot 可以发送一个电子邮件通知,它追踪所有运行中的构建,这样开发人员就可以鸟瞰整个流程。最后,人们常常利用自动化周期构建既定时间内软件质量的度量标准。本文结尾将谈及该度量标准以及在一个 CI 系统内运行它们的原因。

Buildbot 简介

在我们深入探讨 Buildbot 之前,先看一下其架构。如图 1 所示,在构建流程的顶部主要有三个层。首先是一个版本控制层,它从一个版本控制系统钩入通知。其次是一个构建层,它从构建主服务器那里获取通信,并返回构建结果。最后是一个通知层,用于在构建失败时发送电子邮件或一个 IRC 消息,或让一个 web 页面显示构建的累积结果。

图 1. Buildbot 架构概览

Buildbot 架构的中心特性之一是对基于 Python 的 Twisted 库的依赖性,用于处理主服务器(master)和伺服机(slave)之间的异步通信。这个基于回调的架构支持一个很简单、但健壮的主/伺服反馈圈。在本文后面的 参考资料 部分可以找到有关 Twisted 的更多信息。

如果您尚未听说过 Buildbot,在 Google 上搜索一下就会找到大量与大小开源项目相关的主服务器和伺服机。关于伺服机,我在前面简单地提及了一下,它本义上是一个由主 Buildbot 服务器控制的伺服机器。一般来讲,一个伺服机是多个运行不同测试平台的伺服机之一。这是 Buildbot 服务器中一个很重要的概念。例如,您可能在一个开源项目的邮件列表上,听到有人说,“有人自愿充当 Windows 伺服机的虚拟机吗?”

Python 语言项目本身使用大量 Buildbot 伺服机,在尽可能多的平台上持续构建和测试最新版的 Python。图 2 显示了运行 Python 主干的许多伺服机以及测试。随着虚拟化技术的发展,现在可以常常要求开发社区成员托管一个 Buildbot 伺服机,或仅仅运行模拟不同硬件配置的几个虚拟机。

图 2. Python Buildbot;参见 放大图

另一个备受瞩目的 Buildbot 用户是 Google Chrome 浏览器项目。图 3 显示了一个高度定制的 Buildbot,它极大地增强了 Buildbot 用户界面的外观。幸运的是,Google 将这些增强的开放代码提供给 Buildbot,从下面的 参考资料 部分,您可以获取源代码并构建这个定制版本。

图 3. Google Chrome 增强的 Buildbot;参见 放大图

构建这个配置不在本文讨论范围内,但是我建议您自己看一下。现在我们看一下如何使一个 Buildbot 主服务器快速运转起来。

使用 Buildot 实现持续集成的更多相关文章

  1. 使用buildbot实现持续集成(转载)

    转载自:http://www.oschina.net/p/buildbot 使用 Buildot 实现持续集成 使用基于 Python 的工具实现持续集成的理论与实践 牛仔式编码的日子在大多数组织中早 ...

  2. Travis CI用来持续集成你的项目

    这里持续集成基于GitHub搭建的博客为项目 工具: zqz@ubuntu:~$ node --version v4.2.6 zqz@ubuntu:~$ git --version git versi ...

  3. Docker与CI持续集成/CD

    背景        Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制 ...

  4. 在Redhat上为.Net 项目构建基于Jenkins + Github + Mono 的持续集成环境

    在Redhat enterprise 6.5 的服务器上,为在gutub 上的 .net 项目构建一个持续集成环境,用到了Jenkins和mono.因公司的服务器在内网,访问外网时要通过代理,所以在很 ...

  5. 使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(二)

    前言     上一篇随笔Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(一)介绍maven和nexus的环境搭建,以及如何使用maven和nexus统一管理库 ...

  6. 使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(一)

    前言     但凡一个略有规模的项目都需要一个持续集成环境的支撑,为什么需要持续集成环境,我们来看一个例子.假如一个项目,由A.B两位程序员来协作开发,A负责前端模块,B负责后端模块,前端依赖后端.A ...

  7. 持续集成:CruiseControl.NET + VisualSVN.Server

    刚换了工作,有需要搭建一套持续集成的平台,做一下总结. 首先是我用到的工具: 上面缺少了Microsoft Fxcop,可以用来做代码校验,不过实际情况暂时还没有用到.主要的需求目前是,使用已发布的稳 ...

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

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

  9. 劈荆斩棘:Gitlab 部署 CI 持续集成

    阅读目录: install configue gitlab-ci-multi-runner restore nuget packages bulid .sln run unit tests confi ...

随机推荐

  1. MFC滚动条实现要点

    MFC滚动条实现要点 1.鼠标拖动滚动条从而滚动窗口,需要实现CDialog::OnVScroll()函数.根据传入参数nPos,计算滚动距离.最后再调用ScrollWindow()和SetScrol ...

  2. 学习笔记——迭代器模式Iterator

    迭代器模式,使用很多,但是很少实现.常用的集合都支持迭代器. 集合中的CreateIterator()可用于创建自己的迭代器,在里面通过调用迭代器的构造函数Iterator(Aggregate)来绑定 ...

  3. HttpClient的get和post方式提交数据的使用

    /** * Http工具类 */ public class HttpUtil { // 创建HttpClient对象 public static HttpClient httpClient = new ...

  4. UVA 12083 POJ 2771 Guardian of Decency

    /* http://acm.hust.edu.cn/vjudge/contest/view.action?cid=71805#problem/C */ 性质: [1]二分图最大点独立数=顶点数-二分图 ...

  5. VBS调用系统API

    如Beep的API声明为 Public Declare Function Beep Lib “kernel32″ Alias “Beep” (ByVal dwFreq As Long, ByVal d ...

  6. VBS调用windows api函数(postmessage)实现后台发送按键脚本

    '=========================================================================='' VBScript Source File - ...

  7. Chapter 2 Open Book——9

    When I was finished with that, I took my book bag upstairs. Before starting my homework, I changed i ...

  8. ssh proxy配置

    在.ssh目录下新建config文件,并添加以下内容: Host 10.100.101.123 ProxyCommand=nc -X 5 -x [proxyip:proxyport] %h %p

  9. The project target (Android 6.0) was not properly loaded或者The rendering target (Android 6.0) is still loading.

    第一步:在project上右键选择Properties,然后选择Android, 然后在Project Build Target那里选择其他的Target试试: 第二步: 我选了6.0之后,就有菜单可 ...

  10. PHP问答题大全

    答案在题目后面,文字与背景同色,连续单机三次鼠标一行出答案哦: 1.PHP有几种原始数据类型,分别是什么?答:八种,分别是:int,float,string,bool,array,object,res ...