【Jenkinsを使った自動テスト環境を作る】パイプラインを使ったビルド/テストの自動化

 継続的インテグレーション(CI)ツールとして有名なJenkinsは、ソフトウェア開発におけるテストやビルドと言った作業を自動化するツールだ。本記事ではJenkinsの最新版となるバージョン2系で正式に導入された、パイプライン機能を使ったビルド/テスト環境の構築を紹介する。

CIツールと「Jenkins」

 ソフトウェア開発の現場において、そのテストはソフトウェアの設計やコーディングと同じくらい重要な過程である。近年のWebアプリケーションやスマートデバイス向けアプリケーション開発ではアプリケーションのリリース間隔が短くなっている傾向があり、そのためテストもより迅速かつ頻繁に行わなければならくなっている。そういった環境で有用なのが、継続的インテグレーション(CI)ツールだ。

 CIは、元々は「ソフトウェアの開発コストを下げるためには開発の初期から頻繁にテストを行ってフィードバックを行うべき」という考え方から生まれた言葉であり、継続的にテストやビルドなどの作業を繰り返すことなどを指している。これを支援するためのツールがCIツールだ。

 CIツールでは「特定のイベントをトリガーにしてあらかじめ指定しておいた処理を実行する」という機能が提供される。トリガーとして利用できるイベントはツールによって異なるが、たとえば毎日特定の時間にビルドを実行したり、バージョン管理ツールへのコミットをトリガーにしてビルドを実行する、といったことが可能だ。もちろん、手動でビルドを実行させることもできる。

 CIツールはサーバーにインストールして利用するものが主流だったが、近年ではGitなどのソースコード管理システムやGitHubなどのサービスと連携して利用するクラウド型CIツールも登場している。また、XcodeやVisual Studioなどの開発環境と連携して利用できるツールもある。今回紹介する「Jenkins」はサーバーにインストールして利用するタイプのCIツールであり、オープンソース(MITライセンス)で提供されているため誰もが無償で利用できる。

Jenkinsの特徴

 Jenkinsは当初は「Hudson」という名称でリリースされていたCIツールで、2011年に発生したOracleとの商標問題を受けて現在の「Jenkins」という名称に変更された。記事執筆時点の最新版は、2016年4月26日にリリースされたバージョン2系だ。

 Jenkinsはサーバーにインストールして利用するタイプのCIツールだが、Webブラウザ経由で設定や管理を行えるGUIが提供されており、ほぼすべての操作をGUIで行えるのが特徴だ(図1)。

図1 JenkinsのGUI
図1 JenkinsのGUI

 また、Jenkinsでは「ジョブ」という単位で実行する処理を管理する。複数のジョブを1つのJenkinsで管理でき、複数のプロジェクトで1つのJenkinsを共用することも可能だ。

 Jenkinsの大きな特徴として、プラグインで機能を拡張できるという点がある。また、プラグインを検索・インストールする機能もJenkins本体に用意されており、容易にプラグインを導入できる(図2)。

図2 Jenkinsのプラグインブラウザ
図2 Jenkinsのプラグインブラウザ

 JenkinsはJavaで実装されており、Java実行環境が用意されているさまざまなプラットフォームで動作する。Linux上で使われているケースが多いが、WindowsやMac OS Xでの利用も可能だ。

 なお、Jenkinsではさまざまなタイプのジョブを定義できるが、本記事ではJenkinsバージョン2系で正式導入された、「パイプライン」を利用した各種処理の自動化について解説する。

Jenkinsのインストールと初期設定

 JenkinsはJavaのServlet形式であるWAR形式で配布されている。記事執筆時点でのLTS(Long-Term Support、長期サポート)版はバージョン2.46.2で、Jenkins公式Webサイトの「Donwloads」リンクからダウンロードできる。

 また、Red Hat系ディストリビューション向けのRPMパッケージ(最新版安定版)やopenSUSE向けパッケージ(最新版安定版)、Debian向けdebパッケージ(最新版安定版)なども公式に提供されている。

 各環境でのインストール方法は上記のリンク先で説明されているが、たとえばCent OS 7でJenkinsを利用する場合、以下のように設定ファイルをダウンロードし、yumコマンドでインストールを行うだけでJenkinsが利用可能になる。

↓Jenkinsのパッケージリポジトリを追加する
# wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
↓Jenkinsが提供するパッケージの検証を行うための鍵を追加する
# rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
↓Jenkinsをインストールする
# yum install jenkins
↓Jenkinsを起動する
# systemctl start jenkins

 Jenkinsはデフォルトでは8080番ポートでの待ち受けを行うので、このポートにアクセスできるようファイアウォールの設定等も行っておこう。

 なお、JenkinsではDockerHub経由でDocker向けイメージも提供されている。こちらでは安定版(jenkins)および最新版(jenkinsci/jenkins)が入手可能だ。こちらについては次回記事で解説する予定だ。

Jenkinsの初期設定

 インストールが完了したら、Webブラウザで「http://<Jenkinsを稼働させているホスト>:8080/」にアクセスすると、初期設定画面が表示される。ここでJenkinsへの初回アクセス時には意図しないユーザーによる設定を防ぐための「アンロック」作業が必要となる(図3)。

図3 Jenkinsへの初回アクセス時には「アンロック」作業が必要となる
図3 Jenkinsへの初回アクセス時には「アンロック」作業が必要となる

 ここで画面に表示されたファイル(ここでは「/var/lib/jenkins/secrets/initialAdminPassword」)に記載されているパスワードを入力して「Continue」をクリックするとアンロックが完了し、Jenkinsの初期設定作業を開始できる。まず行うのはインストールするプラグインの設定だ(図4)。

図4 プラグインの設定を行う「Customize Jenkins」画面
図4 プラグインの設定を行う「Customize Jenkins」画面

 ここで「Install suggested plugins」を選択すると、よく使われているプラグインが自動的にインストールされる。また、「Select plugins to install」を選択すればインストールするプラグインを選択できる(図5)。

図5 プラグインの選択画面
図5 プラグインの選択画面

 プラグインのインストールや削除は後からでも行えるので、よく分からなければ「Install suggested plugins」を選択するのが良いだろう。こちらを選択するか、「Select plugins to install」でインストールするプラグインを選択するとインストール作業が行われる(図6)。

図6 「Install suggested plugins」を選択すると、GitプラグインやPipelineプラグインといった基本的なプラグインがインストールされる
図6 「Install suggested plugins」を選択すると、GitプラグインやPipelineプラグインといった基本的なプラグインがインストールされる

 続いて、管理用のユーザーを作成する画面が表示される(図7)。ここでユーザー名やパスワード等を入力し、「Save and Finish」をクリックする。

図7 管理用ユーザーを作成するための「Create First Admin User」画面
図7 管理用ユーザーを作成するための「Create First Admin User」画面

 以上でJenkinsの初期設定は完了だ。「Jenkins in ready!」画面が表示されたら、「Start using Jenkins」をクリックするとJenkinsのトップ画面が表示される(図8、9)。

図8 設定が完了したら「Jenkis is ready!」画面が表示される
図8 設定が完了したら「Jenkis is ready!」画面が表示される
図9 Jenkinsのトップ画面
図9 Jenkinsのトップ画面