Jenkinsことはじめ
こんにちは。今回は、個人的にホットなトピックであるJenkinsの紹介とその簡単な使い方について書きたいと思います。
Jenkinsって?
一言で言うと「高性能cron」です(先日参加した勉強会でのcactusmanさんの発表から引用させていただきました)。cronにログ管理機能、通知機能、バージョン管理システム連携などがついて、それをGUIで管理できるようなイメージです。正式には継続的インテグレーション(CI)ツールと言われますが、Jenkins導入=CI導入と考えてしまうと敷居が高いので、cronとか自動化ツールぐらいに考えるといいと思います。Jenkinsはすでに世界中のあらゆる企業やプロジェクトで使われています。
Jenkinsでできること
定期的に自動実行したくてもcronでは面倒なことが簡単に実現可能です。バージョン管理システム上のソースに更新があったらテストを走らせ失敗したらメール通知という処理は、よくある使用例の一つだと思いますが、Jenkinsの標準機能を使って全てGUI上で設定可能(!)です。自前で用意するのはテストスクリプトのみです。実際あまりに何でもできそうなので、あれもこれも自動化したくなると思います。
インストール
Jenkinsは応用範囲が広いこともあって具体的な使い方がイメージしづらいので、とにかくローカルPCや空いてるサーバに入れて触ってみるのがオススメです。というわけでJenkinsをローカルのMacにインストールしてみます。
# インストール
$ brew install jenkins
# 起動
$ java -jar /usr/local/Cellar/jenkins/1.451/lib/jenkins.war
localhost:8080にアクセスすると画面を確認できます。
次にGitHubと連携した自動テストの設定を行なってみます。
Gitプラグイン
Jenkinsには標準でGit連携機能がないので、最初に左メニューのJenkinsの管理 > プラグインの管理から、Jenkins GIT pluginを選択してインストールしておきます。
Github監視ジョブ
Githubリポジトリの更新を監視するジョブを作成します。ジョブはJenkins上の設定の一単位です。
- 新規ジョブ作成で、適当なジョブ名を入力してフリースタイル・プロジェクトのビルドを選択。
- プロジェクトの高度なオプションで、カスタムワークスペースを設定。ワークスペースはジョブが使用するファイルの置かれる場所です。この後作成するジョブで、取得したファイルを使いまわすので明示的に設定しておきます。
- ソースコード管理システムで、Gitを選択してRepository URLを設定。
- ビルド・トリガで、SCMをポーリングを選択。cronと同様の記法を使います。実行は新しいpushがあった時のみ行われます。 きちんとした形でやるのであればポーリングではなく、GitHubのwebhookを使ったほうが良いです。
- ビルド後の処理で、E-mail通知を選択、宛先を追加。設定しておくと失敗した時にメールで通知してくれます。
テスト起動ジョブ
取得したソースに対して、テストを実行するジョブを作成します。
- フリースタイル・プロジェクトのビルドで新規ジョブ作成。
- カスタムワークスペースに、GitHub監視ジョブで設定したものと共通のパスを入力します。
- ビルド・トリガで、他プロジェクトのビルド後にビルドを選択し、GitHub監視ジョブの名前を入力。こうすることでGitHubから新しいソースを取得した直後に、テストを走らせることができるようになります。
- ビルド手順の追加でシェルの実行を選択、実行したいテストスクリプトを指定。カレントディレクトリはワークスペースになります。
以上で設定は終了です。監視したリポジトリにpushを行うと、ジョブが実行されると思います。
まとめ
Jenkinsのインストールやジョブの設定自体はとても簡単です。それよりもチームへの導入方法やスクリプトの用意が問題になると思います。 もしテストコードがないという場合は、cronで行なっている既存の処理を置き換えたり、Lintのような静的コード解析を実行してみてはどうでしょうか。 スクリプトと空きサーバーさえ用意できれば、すぐにJenkinsは動かせるのでぜひ試していただければと思います。