Jenkinsによる継続的インテグレーション

ここ最近、継続的インテグレーション (CI)ツールであるJenkinsが大きな注目を集めている。継続的インテグレーションとは、ソフトウェアのビルドを定期的に実行することでコンパイルやテストが通らないといった問題を早期に発見するというものだ。CIは自動化されたビルドスクリプトさえ用意すれば開発言語を問わず導入することができ、既存の開発環境や開発プロセスにドラスティックな変化を必要とせずに導入できるため敷居も低い。

JenkinsはわかりやすいWebベースのインタフェースを備えており、手軽に導入できるという点が大きなメリットだが、ことオープンソースプロジェクトに関してはより手軽にCIを実現する選択肢が存在する。それがオンラインサービスとしてCIツールを提供しているTravis CIやBuildHiveだ。

Travis CI

Travis CIはオンラインCIサービスの走りといえる存在で、もともとはRuby向けのサービスだったが現在ではJava、Perl、PHP、Pythonなど様々な言語に対応している。

Travis CIで自動ビルドを行うにはリポジトリのルートに.travis.ymlというYAMLファイルを作成し、言語やバージョンなどを指定する必要がある。この設定ファイルでは複数のバージョンの指定や、ビルドの前後に実行する処理を指定できる。設定内容は言語によって異なるため、詳細についてはTravis CIのオンラインドキュメントを参照して欲しい。

次にGithubアカウントでログインし、自分のGithubリポジトリの中から連携するリポジトリを選択する。

図1 : ビルドするリポジトリの選択 (Travis CI)

すると、Githubリポジトリにプッシュするたびにビルドが行われるようになる。後述するBuildHiveと比べると、Travis CI用の設定ファイルを用意しなくてはならないという点は面倒だが、PerlやPHPをはじめErlangやHaskellなど対応言語の幅広さは魅力的だ。また、前述の通り言語のバージョンを複数指定できるのでバージョンごとのテストなども簡単に実行することができる。

図2 : ビルド結果 (Travis CI)

BuildHive

BuildHiveは、Jenkinsの開発者である川口耕介氏の所属するCloudBees社が提供するオンラインサービスで、Githubを使用しているプロジェクトをJenkinsでビルドできるというものだ。

図3 : BuildHive

Jenkinsがそうであるように、BuildHiveもわかりやすいインタフェースが最大の特徴だ。Githubのアカウントでログイン後、ビルド対象のリポジトリを選択するだけで言語やビルドツールにあわせてジョブが自動設定される。筆者はMavenを使用したJavaプロジェクトと、sbtを使用したScalaプロジェクトを選択してみたが、どちらも正しく認識されビルドを行うことができた。

図4 : ビルドするリポジトリの選択 (BuildHive)

あとはGithubリポジトリに変更をプッシュするたびに自動的にビルドが行われる。もちろんジョブを手動で実行することも可能だ。また、通常のJenkins同様ワークスペースをブラウズしたり、やビルドした成果物を取得することもできる。また、デフォルトでいくつかのJenkinsプラグインが利用できるようになっているなどTravis CIと比べると機能が豊富だ。

図5 : ビルド結果 (BuildHive)

まとめ

手軽に利用できるTravis CIやBuildHiveだが、それほど細かくジョブの設定を行うことはできない。例えば、Mavenを使用する場合、リポジトリのルートにpom.xmlが存在しないとMavenプロジェクトと認識されない。ただしTravis CIもBuildHiveも任意のシェルスクリプトを指定できるので、複雑なリポジトリ構造を持つプロジェクトであっても少々設定の手間はかかるもののビルドを行うことは可能だ。

なによりわざわざ自前でサーバを用意しなくてもJenkinsによるCIを実現することができるのは、大きなメリットだ。どちらのサービスもGithubと連携しているため、すでにGithubを使用しているオープンソースプロジェクトであれば、すぐに利用することができる。Githubを使用してオープンソースソフトウェアを開発している方は是非これらのサービスも活用して欲しい。