目 录
1. Buildbot简介 ..................................................................................................................................................... 2 2. buildbot工作原理 ............................................................................................................................................. 2 3. BuildBot的安装 ................................................................................................................................................ 2
3.1 3.2 3.3 3.4
安装Python ........................................................................................................................................... 2 需要安装哪些插件 ............................................................................................................................... 2 安装插件 ............................................................................................................................................... 3 测试安装的版本 ................................................................................................................................... 4
4. BuildBot创建master和slave .......................................................................................................................... 4
4.1 4.2 4.3 4.4
新建master服务端 ............................................................................................................................... 4 新建1个slave客户端 ......................................................................................................................... 4 怎样启动buildbot ................................................................................................................................. 5 Buildbot运行日志 ................................................................................................................................ 5
5. BuildBot的配置 ................................................................................................................................................ 6
5.1 5.2 5.3 5.4 5.5 5.6 5.7
客户端信息 ........................................................................................................................................... 6 监控源码改变的方式 ........................................................................................................................... 6 调度器 ................................................................................................................................................... 6 构建过程 ............................................................................................................................................... 7 buildbot的状态报告 ............................................................................................................................. 7 项目信息 ............................................................................................................................................... 8 数据库信息 ........................................................................................................................................... 8
6. BuildBot研究的总结 ........................................................................................................................................ 8 7. 参考资料............................................................................................................................................................ 8
1. Buildbot简介
BuildBot是一个自动构建工具。每当代码有改变,服务器要求不同平台上的客户端立即进行代码构建和测试,收集并报告不同平台的构建和测试结果。BuildBot用python写的,该python程序只依赖python环境和Twisted(一个python网络框架),可以在很多平台运行。
自动化构建一般包括自动下载源码,编译,测试,打包。
2. buildbot工作原理
Buildbot包含一个服务端,一个或多个客户端。以星形拓扑结构连接。需要配合SVN,CVS等相关版本工具使用。
Build的原理是SVN等源码服务器上代码发生变化后,buildmaster(服务端)通知连接到它上的buildslave(客户端)从SVN服务器上自动下载源码,编译,测试,打包。最后把各个buildslave的自动化构建的结果搜集起来在web上展现,或通过emaill,IRC等方式通知相应的项目开发人员。
3. BuildBot的安装 3.1 安装Python
Python有2.x和3.x版本,buildbot不支持3.x,本次我们采用2.75版本,首先安装Python,设置path环境变量,把这2个地址C:\\Python27,C:\\Python27\\Scripts加入到path变量中。
3.2 需要安装哪些插件
安装buildbot,需要安装多个插件,需要哪些插件在buildbot官方文档可以找到,有些官方文档没提到,但也是必须的。
需要的插件有:Twisted,pywin32,pyOpenSSL,zope.interface,Jinja2,setuptools,python-dateutil,SQLAlchemy,sqlalchemy-migrate,buildbot,buildbot-slave。这些插件在Python的网站和相关网站上都可以下载到,也可以在百度中搜索插件名下载。
第 2 页 共 8 页
3.3 安装插件
Twisted,pywin32,pyOpenSSL是安装程序,点击安装即可。
其余插件都是源码包,需解压后,编译,安装。如安装Jinja2,下载Jinja2-2.7.tar.gz,解压得到Jinja2-2.7目录。cmd下,进入Jinja2-2.7目录,执行python setup.py build,如下图:
Build完后,再执行python setup.py install,如下图:
安装完成后Jinja2被安装在了目录C:\\Python27\\Lib\\site-packages下。其余源码包安装方式都一样。
第 3 页 共 8 页
3.4 测试安装的版本
Buildbot包是的Buildbot服务端安装程序,buildbot-slave包是的Buildbot客户端安装程序,安装完成后Buildbot的可执行程序安装到了C:\\Python27\\Scripts目录下。
所需插件包都安装完成后,检验Buildbot是否安装成功。
在cmd下输入buildbot --version,如下图显示表示buildbot安装成功。
在cmd下输入buildslave--version,如下图显示表示buildslave安装成功。
4. BuildBot创建master和slave
新建前新建1个目录,如build。
4.1 新建master服务端
cmd下进入目录build,执行buildbot create-master master。
其中master为服务端名称,可以任意取,命令执行完毕后会在build中生成1个master目录,会在
master目录中生成一个简单的buildbot服务器配置文件示例master.cfg.sample。
把它的名称改成master.cfg,我们所有对buildbot的配置都是基于这个文件完成的。
4.2 新建1个slave客户端
cmd下进入目录build, 执行buildslave create-slave slave localhost:9989 ygf616 123456
第 4 页 共 8 页
其中slave为客户端名称,可以任意取,
localhost:9989为slave与master通讯的ip和端口, ygf616 123456为slave对应的用户名和密码,可以任意取。 命令执行完毕后会在build中生成1个slave目录
4.3 怎样启动buildbot
启动,停止,重启master,buildbot start/stop/restart master。 测试服务端连接:
在浏览器中访问http://localhost:8010/,如果连接成功表示服务启动成功。
启动,停止,重启slave,buildslave start/stop/restart slave,启动客户端时确保所对应的服务端已启动,客户端才能连上去。
测试客户端连接:
点击Buildslaves查看连接数。
4.4 Buildbot运行日志
Buildbot运行会在服务端产生1个日志文件twistd.log,通过它可以查看一些运行信息和错误信息。 在每个客户端下也会产生1个日志文件twistd.log,通过它可以查看对应客户端的一些运行信息和错误
第 5 页 共 8 页
信息。
5. BuildBot的配置
BuildBot运行都是通过对服务端下的master.cfg来配置完成的。 文件中#表示注释。 c = BuildmasterConfig = {}
所有的配置数据都保存在一个python字典数据结构中。
配置包括:客户端信息,监控源码的改变方式,调度器,构建过程,buildbot的状态报告,项目信息,数据库信息。
5.1 客户端信息
配置文件中BUILDSLAVES
from buildbot.buildslave import BuildSlave
c['slaves'] = [BuildSlave(\"ygf616\
这里可以向服务器注册一个或多个客户端,指明BuildSlave的名字和密码(我们在创建客户端BuildSlave时候,需要指定客户端名字和密码等参数)
c['slavePortnum'] = 9989
两端的通信端口,可以任意指定。如果有防火墙,记得打开这个端口。
5.2 监控源码改变的方式
配置文件中CHANGESOURCES
from buildbot.changes.svnpoller import SVNPoller c['change_source'] = SVNPoller(
svnurl=\"http://WIN-8HOA0OKR8O3:8091/svn/CSha/HelloWorld/\ pollinterval=5, histmax=10,
svnbin='C:\\\\Program Files\\\\TortoiseSVN\\\\bin\\\\svn.exe', svnuser=\"ceshi2\ svnpasswd=\"123456\"
这个配置项告诉服务器发现代码改变的方式,有CVSToys,SVNPoller,BonsaiPoller等多种方式。
5.3 调度器
配置文件中SCHEDULERS
from buildbot.schedulers.basic import SingleBranchScheduler from buildbot.changes import filter from buildbot.schedulers import timed l=
SingleBranchScheduler(name=\"quick\这里是buildbot的调度器,可以控制客户端进行代码构建。name是调度器的名字,branch是代码branch,默认None,表示the default branch。treeStableTimer表示在进行代码构建之前,代码保持不变的必要时间。实际上就是代码上传的缓冲时间,过了这个时间,客户端才进行代码构建。builderNames是客户端BuildSlave
第 6 页 共 8 页
列表。上面调度器只有检查到代码变化后才控制客户端工作
m= timed.Periodic(name=\"daily\上面是另一种调度器Periodic,可以周期的进行代码构建,无论代码是否有变化 c['schedulers']=[l,m]
5.4 构建过程
配置文件中BUILDERS
from buildbot.process.factory import BuildFactory from buildbot.steps.source.svn import SVN from buildbot.config import BuilderConfig from buildbot.steps.vstudio import VS2010
factory=BuildFactory()
factory.addStep(SVN(repourl='http://WIN-8HOA0OKR8O3:8091/svn/CSha/HelloWorld/', mode='full')) #第一步
factory.addStep(VS2010(projectfile=\"HelloWorld.sln\第二步 c['builders'] = [
BuilderConfig(name=\"Single300\BuilderConfig(name=\"daily600\
这个配置项定义一个具体的Builders列表。每个BUILDER的配置选项有3个关键字,分别表示Build名,slave名,一个定义build如何进行的BuildFactory。
上面的例子中的BuildFactory分两个步骤,先从SVN下载源码,接着编译。针对具体的项目,我们可以自己定义,无非是通过addStep添加构建步骤。
5.5 buildbot的状态报告
配置文件中STATUS TARGETS c['status'] = []
from buildbot.status import html
from buildbot.status.web import authz, auth authz_cfg=authz.Authz(
auth=auth.BasicAuth([(\"ygf\ gracefulShutdown = False,
forceBuild = 'auth', # use this to test your slave once it is set up forceAllBuilds = False, pingBuilder = False, stopBuild = False, stopAllBuilds = False, cancelPendingBuild = False,)
c['status'].append(html.WebStatus(http_port=8010, authz=authz_cfg))
第 7 页 共 8 页
这个配置项定义buildbot的状态报告,可以有多中表现形式,包括 web pages,email ,and IRC 等。
from buildbot.status import mail
from buildbot.status.mail import MailNotifier mn = mail.MailNotifier(fromaddr=\"test@qq.com\ sendToInterestedUsers=False, extraRecipients=[\"test@163.com\"], relayhost=\"smtp.qq.com\
smtpUser=\"test@qq.com\#c['status'].append(mn) 上面这段脚本是发送email。
5.6 项目信息
配置文件中PROJECT IDENTITY c['title'] = \"MyOA\"
c['titleURL'] = \"http://www.rockontrol.com\" c['buildbotURL'] = http://localhost:8010/
最后定义项目信息,我们可以从http://localhost:8010/访问buildbot网页报告。这个端口必须和上面的http_port一致,如果有防火墙,记得打开这个端口。
5.7 数据库信息
配置文件中DB URL
c['db'] = {'db_url' : \"sqlite:///state.sqlite\
buildbot所使用的数据库,默认用sqlite,可以换成其他数据库,如mysql
6. BuildBot总结
Buildbot是在buildsalve客户端端进行自动化构建,而并不是在buildmaster服务器端。
Buildbot应用到不同项目中构建过程脚本不一样。我们的例子中只有VS项目的下载源码,编译。关于测试,需要编写单元测试,在构建过程中执行单元测试,关于打包,没研究出来。VS项目的测试与打包需要继续研究,没有好的思路。
在网上没有找到buildbot中运行Java项目的例子和脚本。Java项目构建需要继续研究,没有好的思路。 现在可以进行VS项目的自动编译。
7. 参考资料
Buildbot 官方文档:http://docs.buildbot.net/0.8.7p1/genindex.html Buildbot安装步骤:http://blog.csdn.net/sharpljc/article/details/6070783
第 8 页 共 8 页
因篇幅问题不能全部显示,请点此查看更多更全内容