序章

Buildbotは、ソフトウェアのビルド、テスト、リリースのプロセスを自動化するためのPythonベースの継続的インテグレーションシステムです。 PythonのTwistedライブラリを使用して、ビルドマスターと1つ以上のワーカー間の非同期通信を処理し、複数のプラットフォームでのビルドのテストを容易にします。 Buildbotは高度に構成可能であり、ビルドプロセスがどのように機能するかについてほとんど想定していないため、プロジェクトの固有のニーズに合わせてツールを拡張する必要がある複雑なビルドプロセスやプロジェクトに適しています。

このチュートリアルでは、Buildbotビルドマスターとワーカーを同じマシンにインストールして構成します。

前提条件

このチュートリアルに従うには、次のものが必要です。

サーバーがセットアップされると、フォローする準備が整います。

ステップ1—Buildbotをインストールする

Buildbotプロジェクトでは、Python Package Index(pip)を使用してBuildbotをインストールし、最新バージョンを取得することをお勧めします。最新バージョンは、Ubuntuパッケージで利用できるものよりも数リリース進んでいることがよくあります。

sudoユーザーとして開始し、apt-get updateを使用して、最新のパッケージリストがあることを確認します。

  1. sudo apt-get update

次に、pip自体をインストールします。

  1. sudo apt-get install python-pip

pipが利用可能になったら、それを使用してBuildbotバンドルをインストールします。これには、マスターとワーカー、およびWebインターフェイスに必要な依存関係を含むその他の依存関係が含まれます。 Pipは、それを実行するユーザーのホームディレクトリに.cacheファイルを作成します。 sudo-Hフラグを使用して、これらのファイルを正しい場所に配置します。

  1. sudo -H pip install 'buildbot[bundle]'

サーバーの速度によっては、これが完了するまでに少し時間がかかる場合があります。 インストールが成功した場合の出力の終わりは、次のようになります。

Output
. . . Successfully installed Automat-0.6.0 Jinja2-2.10 MarkupSafe-1.0 PyJWT-1.6.0 Tempita-0.5.2 Twisted-17.9.0 attrs-17.4.0 autobahn-18.3.1 buildbot-1.0.0 buildbot-console-view-1.0.0 buildbot-grid-view-1.0.0 buildbot-waterfall-view-1.0.0 buildbot-worker-1.0.0 buildbot-www-1.0.0 constantly-15.1.0 decorator-4.2.1 future-0.16.0 hyperlink-18.0.0 idna-2.6 incremental-17.5.0 pbr-3.1.1 python-dateutil-2.6.1 six-1.11.0 sqlalchemy-1.2.5 sqlalchemy-migrate-0.11.0 sqlparse-0.2.4 txaio-2.9.0 zope.interface-4.4.3

また、pip自体をアップグレードするための推奨事項が表示される場合があります。

Output
. . . You are using pip version 8.1.1, however version 9.0.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command.

これはBuildbotのインストールには影響しませんが、pipの最新リリースにアップグレードするために少し時間がかかります。

  1. sudo -H pip install --upgrade pip
Output
Collecting pip Downloading pip-9.0.1-py2.py3-none-any.whl (1.3MB) 100% |████████████████████████████████| 1.3MB 768kB/s Installing collected packages: pip Found existing installation: pip 8.1.1 Not uninstalling pip at /usr/lib/python2.7/dist-packages, outside environment /usr Successfully installed pip-9.0.1

最後に、バージョンを確認して、Buildbotのインストールを確認します。

  1. buildbot --version
Output
Buildbot version: 1.0.0 Twisted version: 17.9.0

チュートリアルの前提条件では、SSHトラフィックのみを許可するようにUFWファイアウォールを構成しました。 ステータスを確認します。

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)

BuildbotはWebインターフェイスにポート8010を使用しますが、これは許可されていないため、ここで開きます。

  1. sudo ufw allow 8010

次に、Buildbotサービスを実行するための専用のシステムユーザーとグループを追加します。

  1. sudo addgroup --system buildbot
  2. sudo adduser buildbot --system --ingroup buildbot --shell /bin/bash

最後に、Buildbotをインストールするための新しいユーザーとしてログインします。

  1. sudo --login --user buildbot

これにより、buildbotユーザーとしてログインし、/home/buildbotディレクトリに配置されます。ここで、マスターとワーカーを構成します。

ステップ2—マスターの構成

buildbotコマンドcreate-masterに続いて、ベースディレクトリの値を使用します。

  1. buildbot create-master ~/master
Output
mkdir /home/buildbot/master creating /home/buildbot/master/master.cfg.sample creating database (sqlite:///state.sqlite) buildmaster configured in /home/buildbot/master

次に、master.cfg.samplemaster.cfgにコピーし、参照用に元の場所に残します。

  1. cp ~/master/master.cfg.sample ~/master/master.cfg

次に、ファイルを編集して、ローカルマシンからWebインターフェイスにアクセスできるようにします。

  1. nano ~/master/master.cfg

デスクトップまたは他のデバイスからWebインターフェースにアクセスするために、buildbotURLlocalhostからサーバーのIPアドレスまたはドメイン名に変更します。 また、使用状況レポートポリシーを設定します。 その他の重要な構成値はmaster.cfgで設定されていますが、ここでは残りのデフォルトを維持します。

ファイルの下部近くで、buildbotURL行を見つけ、localhostをサイトのIPアドレスまたはドメイン名に置き換えます。

〜/ master / master.cfg
c['buildbotURL'] = "http://IP_or_site_domain:8010/"

注: master.cfgは、「ワーカー」セクションでワーカーを事前定義します。

〜/ master / master.cfg
. . .
####### WORKERS

# The 'workers' list defines the set of recognized workers. Each element is
# a Worker object, specifying a unique worker name and password.  The same
# worker name and password must be configured on the worker.
c['workers'] = [worker.Worker("example-worker", "pass")]
. . .

チュートリアルの後半で、これらの資格情報を使用してワーカーを作成します。

次に、ファイルの下部で、buildbotNetUsageDataディレクティブの値を設定します。 これは、Buildbotがアプリケーションの改善を支援するために開発者に使用統計を報告するかどうかを定義します。 これをNoneに設定して、これをオプトアウトできます。 使用法に関する基本情報を返送してもかまわない場合は、代わりに文字列"basic"を使用してください。 この設定の詳細については、Buildbotグローバル構成ドキュメントを参照してください。

〜/ master / master.cfg
c['buildbotNetUsageData'] = None
# To send back basic information, use this instead:
#c['buildbotNetUsageData'] = 'basic'

'buildbotURL'を変更し、buildbotNetUsageData行を追加したら、ファイルを保存して終了します。

次のように入力して、マスターの構成を確認します。

  1. buildbot checkconfig ~/master

構文に問題がない場合は、次のメッセージで終わる出力が表示されます。

Output
. . . Config file is good!

出力に構文エラーがあったことが示されている場合は、戻ってファイルを再度確認してください。 checkconfigコマンドが成功を示したら、マスターを起動します。

  1. buildbot start ~/master

再起動が成功すると、次の確認が表示されます。

Output
Following twistd.log until startup finished.. The buildmaster appears to have (re)started correctly.

最後に、構成したbuildbotURLのポート8010のWebブラウザーでサイトにアクセスしてみましょう。

http://IP_or_site_domain:8010/

マスターを実行し、Webインターフェイスにアクセスできることを確認したので、サンプルワーカーを作成します。

ステップ3—ワーカーの構成

マスターとワーカーの関係は、master.cfgファイル内のワーカーの名前とパスワードが、マスターを使用するように構成されたワーカーの名前とパスワードと一致する場合に確立されます。

このステップでは、buildbot-workercreate-workerコマンドを呼び出し、次の4つの設定を渡すことにより、ワーカーを作成および構成します。

  • workerは、ワーカーの設定が保存されるディレクトリの名前です。
  • localhostは、ワーカーのマスターが実行されているアドレスです。
  • example-workerはワーカーの名前であり、~/master/master.cfgファイルでワーカーを一意に識別する必要があります。
  • passはワーカーのパスワードであり、このパスワードは~master/master.cfgの値と一致する必要があります。
  1. buildbot-worker create-worker ~/worker localhost example-worker pass
Output
mkdir /home/buildbot/worker mkdir /home/buildbot/worker/info Creating info/admin, you need to edit it appropriately. Creating info/host, you need to edit it appropriately. Not creating info/access_uri - add it if you wish Please edit the files in /home/buildbot/worker/info appropriately. worker configured in /home/buildbot/worker

ワーカーが最初に接続すると、infoディレクトリ内のファイルが実行されるビルドマスターに送信されます。 これらはWebインターフェイスに表示され、開発者にテストの失敗に関する詳細情報を提供します。

これらを構成します。 まず、管理者の電子メールを含むファイルを開き、例の行Your Name Here <[email protected]>を削除して、名前と電子メールアドレスに置き換えます。

  1. nano ~/worker/info/admin
〜/ worker / info / admin
Sammy Shark <[email protected]>

完了したら、ファイルを保存して終了します。

info/hostファイルは、慣例により、OS、バージョン、メモリサイズ、CPU速度、インストールされている関連ライブラリのバージョン、そして最後にワーカーで実行されているBuildbotバージョンを提供します。

ファイルを開いて関連情報を貼り付け、システムの必要に応じてサンプルコンテンツを更新します。

  1. nano ~/worker/info/host

システムの詳細を反映するために使用する情報を更新します。

〜/ worker / info / host
Ubuntu 16.04.2 2GB Droplet - Buildbot version: 1.0.0 - Twisted version: 17.1.0

完了したら、保存して終了します。 最後に、ワーカーを開始します。

  1. buildbot-worker start ~/worker
Output
Following twistd.log until startup finished.. The buildbot-worker appears to have (re)started correctly.

マスターとワーカーの両方が構成されて実行されたので、テストビルドを実行します。

ステップ4—テストビルドの実行

テストビルドを実行するには、Webインターフェイスで[ビルド]メニューを開き、[ワーカー]を選択します。 サンプルワーカーと、info/adminおよびinfo/hostで設定した情報が表示されます。 ここから、デフォルトのビルダーである「runtests」をクリックして、ビルドを強制できます。

「runtests」画面には、最初のビルド要求が行われるまでほとんど情報がありません。 画面の右上にある[強制]ボタンをクリックして、強制します。

これにより、強制ビルドに関する情報を入力できるダイアログが表示されます。

このテストビルドでは、フィールドを空白のままにして、ポップアップウィンドウの[ビルドの開始]ボタンをクリックします。 「あなたの名前」フィールドに値を入力する場合は、有効なメールアドレスが含まれている必要があることに注意してください。

数秒で、ビルドは正常に完了するはずです。

名前の横にある番号または矢印をクリックすると、ビルドの各ステップの詳細を調べることができます。

このビルドを実行するためにログインする必要がないことに気付いたかもしれません。 デフォルトでは、誰でも管理機能にアクセスできるため、終了する前に、それをロックしてユーザーアカウントを作成します。 使用可能なオプションの詳細については、[Buildbotの認証ドキュメント]( http://docs.buildbot.net/current/developer/authz.html )を参照してください。

master.cfgファイルをもう一度開きます。

  1. nano ~/master/master.cfg

ファイルの最後に、ユーザー名とパスワードを変更して、次の行を追加します。

ファイル:〜/ master / master.cfg
. . .
c['www']['authz'] = util.Authz(
       allowRules = [
           util.AnyEndpointMatcher(role="admins")
       ],
       roleMatchers = [
           util.RolesFromUsername(roles=['admins'], usernames=['Sammy'])
       ]
)
c['www']['auth'] = util.UserPasswordAuth({'Sammy': 'Password'})

終了したら、ファイルに対して別の構文チェックを実行します。

  1. buildbot checkconfig ~/master
Output
Config file is good!

エラーが表示されない場合は、マスターサービスを再起動します。

  1. buildbot restart ~/master

Webインターフェイスをリロードすると、右上に「匿名」というリンクが表示され、管理機能にアクセスできなくなります。

「匿名」をクリックして追加した資格情報をテストします。ログインボックスが表示され、設定したユーザー名とパスワードを入力できます。 ログインすると、「匿名」はビルドを開始するためのアクセス権を失っていますが、「サミー」ユーザーはアクセス権を持っていることがわかります。

この時点で、Buildbotのインストールは完了し、インターフェースを保護するための最小限の手順を実行しました。 ただし、ユーザー名とパスワードはプレーンテキストで送信されています。 次のステップとして、Buildbotを本格的に使用する前に、リバースプロキシを使用してWebインターフェイスを保護することをお勧めします。

結論

このチュートリアルでは、BuildbotマスターとローカルのBuildbotワーカーを同じマシンにインストールして構成しました。 Buildbotを評価している場合は、プロジェクトのクイックツアーを利用することをお勧めします。

それ以外の場合は、次のチュートリアル BuildbotのSystemdユニットファイルを作成する方法に進み、サーバーのinitシステムがBuildbotプロセスを管理できるようにします。