2014年1月26日日曜日

buildbot + mercurial の使い方

次のような設定を行うと、リポジトリ変更時に自動的にビルドされるようになる。
buildbotはver.0.8.6を使用した。
buildbot関連のファイルを置くディレクトリを$workとする。

1. マスター用の設定ファイルを作る

cd $work
buildbot create-master master
cd master
cp master.cfg.sample master.cfg

2. master.cfg を変更する

2.1. CHANGESOURCES を変更する

もともとあったGitPollerを削除し、次の2行を追加する。
from buildbot.changes import pb
c['change_source'] = pb.PBChangeSource(port=9988, user='changeuser', passwd='password_xxx')
ただし、port, user, passwdは適切な値に変更する。

2.2. SCHEDULERS を変更する

SingleBranchScheduler の引数を変更する。
c['schedulers'].append(SingleBranchScheduler(
                         name="all",
                         branch="default",
                         builderNames=["runtests"]))
ブランチを使っていないなら、branchにはdefaultと指定する。
branch名の指定を誤ると、mercurialからアップデートが 通知されるだけになり、ビルドは実行されなくなる。

2.3. BUILDERS を変更する

git関連を削除して、次の行を追加する。
from buildbot.steps.source.mercurial import Mercurial
factory.addStep(Mercurial(repourl='/xxx/yyy/bb-test', mode='full',
                          method='fresh', branchType='inrepo'))
factory.addStep(ShellCommand(command=["./make.sh"]))
repourl はリポジトリのパス。
make.sh はビルドするためのスクリプト。
Makefileを使用しているなら、単にmakeでもよい。

2.4. リポジトリの設定をする

.hg/hgrc に次の内容を追加する。
[hooks]
changegroup.buildbot = python:buildbot.changes.hgbuildbot.hook

[hgbuildbot]
master = localhost:9988
auth = changeuser:password_xxx

3. slave を作る

cd $work
buildslave create-slave slave master example-slave pass

4. 動作させる

cd $work
buildbot start master
buildslave start slave
これで、リポジトリに変更をpushするだけで、変更が反映されたソースコードで 自動的にビルドされるようになる。