使用 Buildot 实现持续集成
原文: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 实现持续集成的更多相关文章
- 使用buildbot实现持续集成(转载)
转载自:http://www.oschina.net/p/buildbot 使用 Buildot 实现持续集成 使用基于 Python 的工具实现持续集成的理论与实践 牛仔式编码的日子在大多数组织中早 ...
- Travis CI用来持续集成你的项目
这里持续集成基于GitHub搭建的博客为项目 工具: zqz@ubuntu:~$ node --version v4.2.6 zqz@ubuntu:~$ git --version git versi ...
- Docker与CI持续集成/CD
背景 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制 ...
- 在Redhat上为.Net 项目构建基于Jenkins + Github + Mono 的持续集成环境
在Redhat enterprise 6.5 的服务器上,为在gutub 上的 .net 项目构建一个持续集成环境,用到了Jenkins和mono.因公司的服务器在内网,访问外网时要通过代理,所以在很 ...
- 使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(二)
前言 上一篇随笔Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(一)介绍maven和nexus的环境搭建,以及如何使用maven和nexus统一管理库 ...
- 使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(一)
前言 但凡一个略有规模的项目都需要一个持续集成环境的支撑,为什么需要持续集成环境,我们来看一个例子.假如一个项目,由A.B两位程序员来协作开发,A负责前端模块,B负责后端模块,前端依赖后端.A ...
- 持续集成:CruiseControl.NET + VisualSVN.Server
刚换了工作,有需要搭建一套持续集成的平台,做一下总结. 首先是我用到的工具: 上面缺少了Microsoft Fxcop,可以用来做代码校验,不过实际情况暂时还没有用到.主要的需求目前是,使用已发布的稳 ...
- 【补充】Gitlab 部署 CI 持续集成
上一篇:<劈荆斩棘:Gitlab 部署 CI 持续集成> 上一篇所配置的.gitlab-ci.yml: stages: - build - test before_script: - ec ...
- 劈荆斩棘:Gitlab 部署 CI 持续集成
阅读目录: install configue gitlab-ci-multi-runner restore nuget packages bulid .sln run unit tests confi ...
随机推荐
- 浅析PageRank算法
很早就对Google的PageRank算法很感兴趣,但一直没有深究,只有个轮廓性的概念.前几天趁团队outing的机会,在动车上看了一些相关的资料(PS:在动车上看看书真是一种享受),趁热打铁,将所看 ...
- Hibernate与Sleep的区别
转自:http://blog.sina.com.cn/s/blog_4b6e98810100n37k.html 休眠(Hibernate),将系统切换到该模式后,系统会自动将内存中的数据全部转存到硬盘 ...
- mysql读写分离配置,利用mybatis实现,解释为什么dynamicDataSource不行
之前发布了mysql主从配置的博客,配置完成之后,那么我们肯定要拿主从来做点什么. 我第一想到的就是mysql的读写分离,让读写分离之后可以大大的提供mysql的性能,比单纯用mysql主从做备份好很 ...
- Java-if 嵌套结构
import java.util.Scanner; public class ifs{ public static void main(String args[]){ Scanner in=new S ...
- 【Machine Learning in Action --2】K-近邻算法改进约会网站的配对效果
摘自:<机器学习实战>,用python编写的(需要matplotlib和numpy库) 海伦一直使用在线约会网站寻找合适自己的约会对象.尽管约会网站会推荐不同的人选,但她没有从中找到喜欢的 ...
- 第3章 Java语言基础----声明成员变量,对变量进行赋值
声明成员变量,对变量进行赋值的正确语句,如下图所示:
- javascript操作json
for (var i = 0; i < selectedPartList.length; i++) { if (selectedPartList[i].vpart_code == jsonRow ...
- AFNetWorking 判断当前版本是否是最新版本
NSString *url = [[NSString alloc] initWithFormat:@"http://itunes.apple.com/lookup?id=%@",@ ...
- Nmap的使用【转载】
1.NMap工具 主要功能:探测主机是否在线.扫描主机开放端口和嗅探网络服务,用于网络探测和安全扫描. NMap支持很多扫描技术,例如:UDP.TCPconnect().TCPSYN(半开扫描).ft ...
- UIImageView 在切图规范的情况下不用设置frame
UIImageView本身是没有frame的,所以UIImageView不用设置frame,UIImageView的fram由它内部的图片决定,所以当要更改UIImageView的大小显示的时候,更改 ...