在Ubuntu上安裝Buildbot是很簡單的事情:sudo apt-get install buildbot。
比較麻煩的是設定,大致瀏覽了一下 Manual,還是不知道怎麼設定,轉而找 Google 大神,Mousebender 的這篇Installing buildbot,就很簡單易懂。但由於這篇提供的設定是 2006 年的,現在的設定稍稍有改變,c[‘bots’] 必須修正為 c[‘slaves’],後面會提到。
依據 Architecture,Buildbot必須要有 master 跟 slave,master 負責提供 web 介面跟叫 slave 做事,而 slave 就只聽命令做事,所以設定的時候就要分別設定 master 跟 slave。
master 的設定,得先使用 buildbot create-master [目錄名] 來建立,這會幫你建立一個目錄,並提供你設定檔的範本(master.cfg.sample)。第一步就是要把 master.cfg.sample 改為 master.cfg,然後修改 master.cfg。要調整的基本上有這幾個:
- c[‘schedulers’],要排程的時間。
- f1.addStep(),這決定怎麼編譯。
- c[‘slaves’]、c[‘slavePortnum’],slave的名稱、密碼以及要 listen 的 port,待會建立 slave 時會用到。
- c[‘projectName’],你專案的名稱。
- c[‘projectURL’],你專案的網址。
接著要建立 slave,這邊用 master.cfg.sample 來舉例,也就是假設你剛剛沒改 c[‘slaves’]、c[‘slavePortnum’] 的內容,所以這邊用 buildbot create-slave [目錄名] localhost:9989 bot1name bot1passwd 來建立 slave,接著把 slave 目錄下的 Makefile.sample 改為 Makefile 即可。
啟動的時候,要先啟動 slave 再啟動 master,啟動的指令都是 buildbot start [目錄名],例如 buildbot start myproject-master、buildbot start myproject-slave。
這樣就大功告成,你可以打開 http://localhost:8010 來看 build 的進度了。
下面是我的設定檔:
# -*- python -*- c = BuildmasterConfig = {} ####### BUILDSLAVES from buildbot.buildslave import BuildSlave c['slaves'] = [BuildSlave("myproject-slave", "password", max_builds=1)] c['slavePortnum'] = 9989 ####### CHANGESOURCES from buildbot.changes.pb import PBChangeSource c['change_source'] = PBChangeSource() ####### SCHEDULERS from buildbot.scheduler import Scheduler, Periodic c['schedulers'] = [ Periodic("every_12_hours", ["buildbot-full"], 12*60*60 ) ] ####### BUILDERS from buildbot.process import factory from buildbot.steps.source import CVS from buildbot.steps.shell import Compile, ShellCommand from buildbot.steps.python_twisted import Trial f1 = factory.BuildFactory() f1.addStep(ShellCommand(command=["/home/user1/build/build.sh"])) f1.addStep(Compile()) b1 = {'name': "buildbot-full", 'slavename': 'myproject-slave', 'builddir': "full", 'factory': f1, } c['builders'] = [b1] ####### STATUS TARGETS c['status'] = [] from buildbot.status import html c['status'].append(html.WebStatus(http_port=8010)) ####### PROJECT IDENTITY c['projectName'] = "myproject" c['projectURL'] = "http://myproject-server" c['buildbotURL'] = "http://localhost:8010/"