Chinaunix首页 | 论坛 | 博客
  • 博客访问: 455899
  • 博文数量: 45
  • 博客积分: 2526
  • 博客等级: 少校
  • 技术积分: 478
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-12 21:04
文章分类

全部博文(45)

文章存档

2014年(1)

2011年(1)

2010年(3)

2009年(22)

2008年(18)

我的朋友

分类: Python/Ruby

2008-07-08 22:21:06


BuildBot是一个自动构建工具。每当代码有改变,服务器要求不同平台上的客户端立即进行代码构建和测试,收集并报告不同平台的构建和测试结果。BuildBot用python写的,该python程序只依赖python环境和Twisted(一个python网络框架),可以在很多平台运行。下面详细介绍buildbot的安装和配置步骤。

首先介绍下如何安装:
1. install Twisted
Twisted 依赖 zope.interface and Python
wget -c
python setup.py install --prefix=$HOME

install zope.interface
wet -c
python setup.py build
python setup.py install --prefix=$HOME

2。 buildbot 源码
buildbot依赖Twisted和Python
SF打不开,不过可以到python网站下载
wget -c

python setup.py build
python setup.py install --home=~
That will populate ~/lib/python and create ~/bin/buildbot. Make sure this lib directory is on your PYTHONPATH.

把新模块的路径加到python系统路径下。
export PYTHONPATH=$HOME/lib/python:$HOME/lib/python2.4/site-package:$PYTHONPATH
如果有root权限,你也把上面的程序安装在系统目录下,直接python setup.py install 不指定安装目录。

3. check buildbot is ready
$ buildbot --version
Buildbot version: 0.7.7
Twisted version: 8.1.0

这里开始介绍buildbot服务器和客户端的配置。

1 setup buildbot master (server)
mkdir ~/buildbot_master
buildbot create-master buildbot_master


配置服务器端:
命令执行后会在buildbot_master目录下生成一个简单的buildbot服务器配置文件示例master.cfg.sample
我们可以参考这个来配置buildbot服务器,我们简单来分析这个文件。
c = BuildmasterConfig = {}
所有的配置数据都保存在一个python字典数据结构中。

from buildbot.buildslave import BuildSlave
c['slaves'] = [BuildSlave("bot1name", "bot1passwd")]
这里可以向服务器注册一个或多个客户端,指明BuildSlave的名字和密码(我们在创建客户端BuildSlave时候,
需要指定客户端名字和密码等参数)

c['slavePortnum'] = 9989
两端的通信端口,可以任意指定。如果有防火墙,记得打开这个端口。

from buildbot.changes.pb import PBChangeSource
c['change_source'] = PBChangeSource()
这个配置项告诉服务器发现代码改变的方式,有CVSToys,SVNPoller,BonsaiPoller等多种方式。
PBChangeSource是buildbot的build-in方式。

from buildbot.scheduler import Scheduler
c['schedulers'] = []
c['schedulers'].append(Scheduler(name="all", branch=None,
                                 treeStableTimer=2*60,
                                 builderNames=["buildbot-full"]))

这里是buildbot的调度器,可以控制客户端进行代码构建。name是调度器的名字,branch是代码branch,默认None
表示the default branch。treeStableTimer表示在进行代码构建之前,代码保持不变的必要时间。实际上就是代码上传的缓冲时间,过了这个时间,客户端才进行代码构建。builderNames是客户端BuildSlave列表。还有可以指定一个回调函数fileIsImportant,函数返回为真才进行代码构建,否测忽略这次代码更新。

上面调度器只有检查到代码变化后才控制客户端工作,buildbot还提供了另一种调度器Periodic,可以周期的进行代码
构建,无论是否有代码变化。举个例子:
periodic = Periodic("every_30_minutes", ["mybuilder", "mybuilder2"], 30*60)
c['schedulers'] = [periodic]
显然这表示mybuilder和mybuilder2两个BuildSlave每过30分钟进行一次代码构建。

cvsroot = ":pserver:anonymous@cvs.sourceforge.net:/cvsroot/buildbot"
cvsmodule = "buildbot"

from buildbot.process import factory
from buildbot.steps.source import CVS
from buildbot.steps.shell import Compile
from buildbot.steps.python_twisted import Trial
f1 = factory.BuildFactory()
f1.addStep(CVS(cvsroot=cvsroot, cvsmodule=cvsmodule, login="", mode="copy"))
f1.addStep(Compile(command=["python", "./setup.py", "build"]))
f1.addStep(Trial(testpath="."))

b1 = {'name': "buildbot-full",
      'slavename': "bot1name",
      'builddir': "full",
      'factory': f1,
      }
c['builders'] = [b1]
这个配置项定义一个具体的Builders列表。每个BUILDER的配置选项有5个关键字,分别表示Build名,slave名,构建
目录和一个定义build如何进行的BuildFactory。上面的例子中的BuildFactory分三个步骤,现从CVS下载源码,接着
编译,最后测试。针对具体的项目,我们可以自己定义,无非是通过addStep添加构建步骤。

c['status'] = []

from buildbot.status import html
c['status'].append(html.WebStatus(http_port=8010))
这个配置项定义buildbot的状态报告,可以有多中表现形式,包括 web pages, email senders, and IRC bots等


c['projectName'] = "Buildbot"
c['projectURL'] = ""
c['buildbotURL'] = ""
最后定义项目信息,我们可以从访问buildbot网页报告。这个端口必须和上面的http_port
一致,如果有防火墙,记得打开这个端口。

在启动之前,可以测试下配置文件。
buildbot checkconfig master.cfg
如果正确,信息如下:
Config file is good!
启动服务器:
buildbot start BASEDIR
看到如下信息说明服务器正常启动
。。。。。。
2008-07-05 04:59:46+0000 [-] configuration update started
2008-07-05 04:59:46+0000 [-] configuration update complete
The buildmaster appears to have (re)started correctly.
服务器启动的所以log保存在BASEDIR/twistd.log中。

停止服务器:
buildbot stop BASEDIR

2.setup buildbot slave (client)
buildbot create-slave --umask=022 ~/buildslave buildmaster.example.org:42012 myslavename mypasswd

buildbot create-slave build_test/ localhost:8010 myslave 123
命令运行后,会在BASEDIR目录下生成客户端配置信息。不要大的改动,BASEDIR/info/admin包含你的名字和邮件
地址,BASEDIR/info/host是客户端机器的配置(内存,CPU信息等),这些信息会出现在web pages上。
启动客户端:
buildbot start BASEDIR
看到如下信息说明服务器正常启动
2008/07/07 22:27 +0800 [-] Starting factory
2008/07/07 22:27 +0800 [Broker,client] message from master: attached
The buildslave appears to have (re)started correctly
客户端启动的所以log保存在BASEDIR/twistd.log中。

停止客户端:
buildbot stop BASEDIR

最后附上我自己的master.cfg
文件:master.cfg.zip
大小:3KB
下载:下载

还有个截图:



阅读(10332) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2011-02-12 19:18:24

Ruby是为了让程序设计更快乐而开发的程序语言。Ruby具有“彻底面向对象”、“丰富的程序库”、“亲和力高的直观语法形式”等多项特征,但这些特征并不是Ruby的目的,只能说是为了让程序设计更有趣而开发的手段罢了。 luckyqiao

crook2009-07-23 11:16:10

what's the ruby version?

chinaunix网友2009-07-18 10:37:15

Buildbot is really nice tool, I found its use in Game industry(UE3), open source community(Chronium), but it's not quite easy as ruby to get hands on quickly, I think language matters a lot! A ruby versioned one should emerge!