buildbot系统维护知识
crook
|
1#
crook 发表于 2008-08-06 20:38
buildbot系统维护知识1。 服务器端(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 = r'master.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 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实时访问。 |