zoukankan      html  css  js  c++  java
  • [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 = 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客户端(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/

    完!

  • 相关阅读:
    Less(27a)GET
    Less(27)GET
    虚拟机打开文件黑屏
    mysql开放远程连接权限
    fidder如何设置代理转发
    如何获取APK的包名
    ADB调试原理之通俗版本
    adb端口5037被占用怎么办
    ADB调试原理
    如何使用无线调试手机
  • 原文地址:https://www.cnblogs.com/itech/p/1966522.html
Copyright © 2011-2022 走看看