BuildBot メモ :: 幕の内 - CMS - コンテンツマネジメントシステム

BuildBot メモ

BuildBotはPythonで記述されたテスト自動化システムです。任意のイベントを契機に動きだし、必要なリソースの取得・テスト・記録・通知を行います。幕の内の開発ではBuildBotを用いてSubversionからのチェックアウト・テスト・メール通知を行っています。

BuildBotとは

BuildBotはPythonで記述されたテスト自動化システムです。任意のイベントを契機に動きだし、必要なリソースの取得・テスト・記録・通知を行います。幕の内の開発ではBuildBotを用いてSubversionからのチェックアウト・テスト・メール通知を行っています。

BuildBotは基本的に自動テストツールなので、テストをたくさん書いておかないとあまり意味がありません。幕の内開発では UnitTest, functional-test, Seleniumでのテストを行っていて、これらのうちUnitTest, functional-testをBuildBotでテストしています。

BuildBotの応用としては、パッケージの作成・Nightly-buildの作成・Tracへのチケット発行などが出来ます。

BuildBotの日本語文献をあまり見かけないので、社内で構築したときのメモを(あまり手を加えずに)公開します。

インストール

BuildBot を動かすには次のものが必要

Twisted 関連は "Twisted-sumo" のtar玉には Twisted Core 、 Twisted Mail など Twisted のサブパッケージ一式のほか、Zope Interface も含まれているので、これをダウンロードするとよい。Zope Interface をインストールしてから Twisted をインストールする。

$ wget http://tmrc.mit.edu/mirror/twisted/Twisted/2.2/TwistedSumo-2006-02-12.tar.bz2
$ tar jxvf TwistedSumo-2006-02-12.tar.bz2
$ cd TwistedSumo-2006-02-12/ZopeInterface-3.1.0c1/
$ python setup.py build
$ python setup.py install
$ cd ..
$ python setup.py build
$ python setup.py install

BuildBot は sourceforge からダウンロードして、ホームディレクトリ以下にインストールする

$ wget http://jaist.dl.sourceforge.net/sourceforge/buildbot/buildbot-0.7.4.tar.gz
$ tar zxfv buildbot-0.7.4.tar.gz;cd buildbot-0.7.4
$ python setup.py install --home=~/buildbot

$HOME/buildbot/bin には buildbot がインストールされていていることを確認する。

$ ~/buildbot/bin/buildbot --version
Buildbot version: 0.7.4
Twisted version: 2.2.0

幕の内プロジェクト用には次の組み合わせでインストールを行った。

  • Python 2.4.3
  • BuildBot 0.7.4
  • Twisted 2.2.0
  • Zope Interface 3.1.0c1
  • PyWin32 210

セットアップ

マスターボット

マスターボットの作り方

$ buildbot create-master /path/to/directory

で 指定したディレクトリにマスターボットようディレクトリを作成。今回は /home/zope/buildbot/master に作成。

作成したディレクトリに含まれる master.cfg を編集することで、マスターボット、スレーブボットの振る舞いを設定する。ちなみに、拡張子は cfg だけど、中身は Python プログラム。

現在は2時間に1回実行(schedulers で設定)

ビルドステップ(buildersに記載)

  • ソースコードのアップデート(lib/python, etc/package-includes)
  • ユニットテストを走らせる
  • ファンクショナルテストを走らせる

Note

もうすこし詳しく書く。

スレーブボット

スレーブボットの作り方

$ buildbot create-slave $HOME/buildbot/slave/330_trunk HOST:PORT SLAVE_NAME PASSWORD

HOSTにはマスターのホストやIPを指定します。 ポート番号(PORT)には master.cfg の slavePortnum で設定されている値を入れます。現在は9989です。

SLAVE_NAME, PASSWORD は master.cfg の bots にタプルで渡します。

必要なスレーブ(テスト対象)として以下のソースコードとOSの組み合わせを用意します。

  • ソースコード
    • trunk
    • branches/1.0.x
  • OS
    • Linux RedHat Enterprise Linux
    • Windows Server 2003

Linux サーバーへのスレーブのインストール

今回 buildbot を実行するユーザーを仮にzopeとします。 ~/.buildbotrc に buildbot 用の環境変数が設定されているので、このファイルを source するとたたくコマンドが短くなります。

Linux 用スレーブは ~/buildbot/slave/330_trunk、~/buildbot/slave/330_10x の2個あります。

Windows サーバーへのスレーブのインストール

Windows 版 Python のインストールにはAdmin権限がないと「システム管理者によって、ポリシーはこのインストールを実行できないように設定されています。」としかられてしまうので注意。

Windows 用スレーブは C:buildbot330_trunk と C:buildbot330_10x の2個あります。

Note

  • サービスとして登録

    "contrib/windows/buildbot_service.py" が使える?

運用

ビルドボットの起動・停止・再起動

マスター、スレーブともにコマンドは一緒。 ここで指定するパスは create-master、 create-slave を実行したときと同じパスです。

Linux

RedHat(10.0.0.1) の場合

$ buildbot start|stop|restart $HOME/buildbot/master
$ buildbot start|stop|restart $HOME/buildbot/slave/330_trunk

Windows

Windows Server 2003(10.0.0.2)の場合

C:\buildbot>C:\Python24\Scripts\buildbot start|stop|restart C:\buildbot\330_trunk

パッケージの更新

パッケージの追加した場合

  • 各スレーブの $INSTANCE_HOME/etc に追加するパッケージの zcml を追加する
  • master.cfg 内に追加するパッケージのチェックアウト/アップデートを追加する
  • ビルドマスターを再起動する

パッケージの削除した場合

  • 各スレーブの $INSTANCE_HOME/etc から削除するパッケージの zcml を削除する
  • master.cfg 内に削除するパッケージをチェックアウト/アップデートしている箇所があれば削除する
  • ビルドマスターを再起動する

メール送信

テストが失敗した場合のみメールが送信させるには、master.cfg の MailNotification で mode を "failing" にする必要がある。 テスト結果を受信したい場合は master.cfg の MailNotifier にアドレスを追加すること。

Note

  • BuildBotにsvn upを実行させているのをCheckOutもさせるようにする

Misc

subversion 連携

buildbot のソースコードの contrib フォルダに subversion と連携するためのスクリプトがいくつか入っている。使えるかもしれない。

  • svnpoller.py
  • svn_buildbot.py
  • svn_watcher.py

buildout

Zope3のパッケージ管理ツールだが、BuildBotにも使えるかもしれない。リリース物に含まれる依存パッケージを管理できれば、BuildBotで最新ソース取得時に自動的にソースが取得できるようになる。

http://svn.zope.org/zc.buildout/

環境変数

buildbotで実行するスクリプトに環境変数を渡したいときはこんな風に書く。Windowsではこれが効かないので注意!

f.addStep(ShellCommand, command=["make", "test"],
          
env={'LANG': 'fr_FR'})

日本語全文検索KABAYAKI コミュニケーションポータル オープンソースウェブ ウェブフレームワークKahua オンライン出版サイトKarretta
本サイト上で記載されている製品名および商品名は、それぞれの会社の商標または登録商標です。
幕の内 (R) は Time Intermedia Corporation の登録商標です。
BuildBot メモ :: 幕の内 - CMS - コンテンツマネジメントシステム