原文: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. HTML中加载flash方法

    首先贴上代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t ...

  2. windows下更新python报错permission denied

    注意退出所有python进程,可能是在使用中导致权限不足以删除

  3. Kubernetes 1.5.1 部署

    > kubernetes 1.5.0 , 配置文档 # 1 初始化环境 ## 1.1 环境: | 节 点  |      I P      ||--------|-------------||n ...

  4. 第三十六节,os系统级别操作模块

    在使用os模块时需要先 import os 引入模块 os.getcwd()模块函数 功能:获取当前工作目录,即当前python脚本工作的目录路径[无参] 使用方法:os.getcwd() 格式如:a ...

  5. 引入的ajax中异步添加联系人

    申请出差控制器 中 填写联系人 直接在控制器中实例化联系人表,收集ajax提交的数据.插入表 public function addcontacts(){ $model = M('contacts') ...

  6. JavaScript性能优化技巧之函数节流

    函数节流技术的主要思路是,通过一个定时器,阻断连续重复的函数调用.对于我们自己内部使用的函数,这通常意义不大,也不推荐使用这个技术,它可能会丢失对某些数据的处理.但是对于在用户界面调用的函数,却非常有 ...

  7. 修改一个Label上字体的大小(富文本)

    假如修改上面的Label上价格30000的大小,那么需要用到富文本 上代码 // 字符串30000 NSString * priceNumber = @"30000"; [pric ...

  8. HDU 5965 三维dp 或 递推

    题意:= =中文题 思路一:比赛时队友想的...然后我赛后想了一下想了个2维dp,但是在转移的时候,貌似出了点小问题...吧?然后就按照队友的思路又写了一遍. 定义dp[i][j][k],表示第i列, ...

  9. pulseaudio的交叉编译

    在/etc/profile里导入 export PATH==$PATH:/home/jack/arm-linux-gcc/x-tools/arm-unknown-linux-gnueabi/bin 配 ...

  10. php 数组操作符

    1.数组操作符 数组运算符 例子 名称 结果 $a + $b 联合 $a 和 $b 的联合. $a == $b 相等 如果 $a 和 $b 具有相同的键/值对则为 TRUE. $a === $b 全等 ...