[BuildRelease Management]buildbot

Posted 念槐聚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[BuildRelease Management]buildbot相关的知识,希望对你有一定的参考价值。

 

 

一 buildbot安装

1. install Twisted
Twisted 依赖 zope.interface and Python
wget -c ​​​http://tmrc.mit.edu/mirror/twisted/Twisted/8.1/Twisted-8.1.0.tar.bz2​​python setup.py install --prefix=$HOME

install zope.interface
wet -c ​​​http://www.zope.org/Products/ZopeInterface/3.3.0/zope.interface-3.3.0.tar.gz​​​python setup.py build
python setup.py install --prefix=$HOME

2。 buildbot 源码
buildbot依赖Twisted和Python
SF打不开,不过可以到python网站下载
wget -c ​​​http://pypi.python.org/packages/source/b/buildbot/buildbot-0.7.7.tar.gz#md5=4647a15a9d9b2db6a5b3493ac78e11d9​

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系统维护知识 :​​http://blogold.chinaunix.net/u2/68938/showart_1111019.html​

buildbot安装配置笔记 :​​http://www.cublog.cn/u2/68938/showart_1076484.html​

 

二 buildbot设置

1 buildbot服务器端(buildbot master)维护
buildbot的服务器通过下面命令创建:buildbot create-master buildmaster_dir 命令执行后,会在指定的buildmaster_dir下生成buildbot的服务器信息。其中有四个重要的文件/目录:
a) buildbot.tac -- 该文件包含创建buildmaster的状态信息,里面指定buildmaster的工作路径(basedir)和默认的配置文件名(master.cfg)。这里basedir的值实际上就是buildmaster_dir。对于维护人员来说,改变这两个参数就可以改变buildmaster的工作路径和默认读取的配置文件名。

            例如运行 buildbot create-master /home/ray/buildbot_master,则生成的 buildbot.tac如下:
            1
            2 from twisted.application import service
            3 from buildbot.master import BuildMaster
            4
            5 basedir = r/home/ray/buildbot_master
            6 configfile = rmaster.cfg
            7
            8 application = service.Application(buildmaster)
            9 BuildMaster(basedir, configfile).setServiceParent(application)

b)master.cfg  -- 该文件是buildmaster的配置文件,控制整个buildbot系统的个工作流程。每当buildmaster启动后,第一件事情就是解析这个文件,是系统工作流程的核心。这个在文章最后详细介绍。
c)twistd.log   -- 该文件是buildmaster的日志,如有错误发生,应该优先分析这个文件。

d) public_html  -- 该目录是buildmaster的网页信息的根路径。下面有三个文件buildbot.css, index.html和robots.txt,可以自定义buildmaster的网页信息。

对于升级一个已经存在的buildmaster,则执行命令buildbot upgrade-master basedir

 

2 buildbot客户端(buildbot slave)维护
buildbot的客户端通过下面命令创建:buildbot create-slave --umask=022 ~/buildslave_dir buildmaster.example.org:42012 myslavename mypasswd (各个参数的具体意义参考“buildbot create-slave --help”)命令执行后,会在指定的buildslave_dir下生成buildslave的客户端信息。同样有三个重要的文件/目录:
a) buildbot.tac -- 该文件包含创建buildslave的状态信息,里面保存了5个重要的参数,分别是basedir, buildmaster_host, port, slavename和passwd。 这几个参数必须和buildmaster端master.cfg中的配置保持一致。因为buildslave需要通过port与buildmaster进行TCP通信,而buildmaster通过myslavename和mypasswd来查询buildslave的状态。对于维护人员来说,如果不想重新创建的buildslave, 完全可以重新定义这些参数,适应新的buildmaster。

              例如运行上述命令,则生成的 buildbot.tac如下:
             

1 
2 from twisted.application import service
3 from buildbot.slave.bot import BuildSlave
4
5 basedir = r/home/ray/buildslave_dir # “/home/ray/”是用户home目录
6 buildmaster_host = buildmaster.example.org
7 port = 42012
8 slavename = myslavename
9 passwd = mypasswd
10 keepalive = 600
11 usepty = 1
12 umask = None
13
14 application = service.Application(buildslave)
15 s = BuildSlave(buildmaster_host, port, slavename, passwd, basedir,
16 keepalive, usepty, umask=umask)
17 s.setServiceParent(application)

b)twistd.log   -- 该文件是buildslave的日志,如有错误发生,应该优先分析这个文件。
c)info -- 该目录是buildslave的个人信息。下面有两个文件admin和host, 这两个文件的内容会出现在buildmaster的网页上。

 

3 配置文件(master.cfg)维护
在buildmaster的basedir下有个基本的配置文件示例(master.cfg.sample),更多的例子可以在源码包中的doc目录找到。这个文件实际上是个python脚本,buildmaster启动的时候,会逐行解析这个python脚本,从而得到一个完整的配置信息。信息保存在BuildmasterConfig(字典)中,其中重要的keys如下,我们分成两组来分析。

一组提供基本的配置,包括两端通信端口, web访问URL和客户端信息。
    * c[buildbotURL]: Defining the Project
    * c[status]: Defining Status Targets
    * c[slaves]: Buildslave Specifiers
    * c[slavePortnum]: Setting the slaveport

另一组提供更多的控制选项,包括监测源码更新的方式,构建的调度器和自定义的构建过程。
    * c[builders]: Defining Builders
    * c[change_source]: Listing Change Sources and Schedulers
    * c[schedulers]: Listing Change Sources and Schedulers

继续上面的例子,通过下面命令来生成buildmaster和buildslave
buildbot create-master buildmaster_dir
buildbot create-slave --umask=022 ~/buildslave_dir buildmaster.example.org:42012 myslavename mypasswd
如果想通过buildmaster.example.org:10000访问buildbot服务器,各个key的赋值应当设置为:
    c[slavePortnum] = 42012
    c[buildbotURL]   = buildmaster.example.org:10000
    c[slaves]        = [BuildSlave("myslavename", "mypasswd")]
    c[status]        = [(html.WebStatus(http_port=10000))]

注意,这里涉及到两个端口,一个用于两端的TCP通信,另一个就是公开的web访问端口, 而且这两个端口不能够相同。

如果想增加新的buildslave, 除了在客户端用命令“buildbot create-slave --umask=022 ~/buildslave_dir2 buildmaster.example.org:42012 myslavename2 mypasswd2”之外,还需要更新服务器master.cfg文件,通知服务器,增加了新的buildslave。此时,  c[slaves] = [BuildSlave("myslavename", "mypasswd"), BuildSlave("myslavename2", "mypasswd2")]同时c[status]也可以有多种表现形式,出了web方式,最常用来监测buildbot状态的就是MailNotifier。 每当完成一次自动构建,系统会自动给相关人员发送邮件。具体的写法就是:
c[status].append(mail.MailNotifier(fromaddr="​​​buildbot@localhost​​​",
                                    extraRecipients=["​​​builds@example.com​​​"],
                                    sendToInterestedUsers=False))

最后的才是重点,关于master.cfg的第二组配置参数。c[change_source]设置监测源码更新的方式,最常用的也是系统build-in的方式是PBChangeSource。 我们可以通过built-in buildbot sendchange来通知服务器代码更新, 或者使用buildbot下载包自带的工具,例如contrib/svn_buildbot.py,contrib/arch_buildbot.py, contrib/hg_buildbot.py。这些脚本可以做为commit hook script,一旦代码更新,立即通知buildmaster。上面这些脚本需要你有权限访问SVN/ARCH/HG服务器,可以在源码树中添加commit hook script。如果没有权限,可以尝试另外一个脚本contrib/vn_watcher.py,该脚本可以运行在任何机器(当然要有python环境),如果放在buildmaster机器上运行svn_watcher.py ​​https://skyeye.svn.sourceforge.net/svnroot/skyeye​​ localhost:42012 watch这个脚本每隔10分钟,运行svn log命令来检查svn是否有更新,如果有则运行buildbot sendchange来通知buildmaster。

c[schedulers]顾名思义就是buildmaster的调度器,指定哪些buildslave需要开始工作,哪些branch需要关注。例如
c[schedulers].append(Scheduler(name="all", branch=None,
                                 treeStableTimer=2*60,
                                 builderNames=["buildbot-full"]))

最后c[builders]才是实际的自动构建过程。这个配置项也是一个字典,最重要的key就是factory。 该factory详细定义构建过程的步骤,例如下载源码,编译连接,测试运行。例如:

cvsroot = ":pserver:anonymous@cvs.sourceforge.net:/cvsroot/buildbot"
cvsmodule = "buildbot"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: "myslavename",
builddir: "full",
factory: f1,

c[builders] = [b1]


很显然,这个builders的名字是buildbot-full, 工作机器是myslavename, 工作路径是full(basedir/full),构建过程包含三个步骤(从CVS下载源码,构建源码,测试源码)。如果想增加新的builders, 则可以c[builders] = [b1,b2]。整个构建步骤,名字和buildslave都可以在web实时访问。

 

三 主页:​​http://trac.buildbot.net/​

 

完!

 


作者:​​iTech​

微信公众号: cicdops

github:​​https://github.com/cicdops/cicdops​

[BuildRelease




以上是关于[BuildRelease Management]buildbot的主要内容,如果未能解决你的问题,请参考以下文章

management.server.port 和 management.port 属性有啥区别?

如何查看 cloudera management daemon 版本

Travel Management System 原理

POJ 1004 Financial Management

administration和management有啥区别?

ISSS615 Data Management