【Jenkinsを使った自動テスト環境を作る】Dockerコンテナを使って自動ビルドを実行する



 継続的インテグレーション(CI)ツールとして有名なJenkinsは、ソフトウェア開発におけるテストやビルドと言った作業を自動化するツールだ。後編となる今回は、Dockerを使ってコンテナ内に構築したビルド環境をJenkinsから利用する例を紹介する。

Jenkinsの「マスター/スレーブ」機能

 前回記事では、Jenkinsをインストールしたサーバー内でソフトウェアのビルドやテストを行うことを前提に環境を構築していった。Jenkinsをインストールしたサーバーと、対象とするソフトウェアのビルド/実行環境が同じで構わなければこれで問題はないが、たとえばそれぞれビルド/実行環境が異なる複数のソフトウェアをJenkinsで管理したい場合、このやり方では複数台のサーバーを用意しなければならない。

 Jenkinsではこういった問題を解決するため、Jenkinsがインストールされたサーバーとは異なるサーバーを遠隔操作し、ビルドやテストをそのサーバー上で実行する機能が用意されている。このとき、Jenkinsがインストールされたサーバーは「マスター」と呼ばれ、ビルドを実行する、遠隔操作される側のサーバーは「スレーブ」と呼ばれる。Jenkinsではスレーブを遠隔操作するためのいくつかの手段を提供しているが、もっとも設定が容易なのはSSHでスレーブにリモートログインして操作を実行するというものだ。この場合、スレーブとして利用するサーバーにSSHでログインさえできれば、それ以外の設定はJenkinsが自動的に行う仕組みになっており、非常に簡単に利用できるのが特徴だ。

 さらに、Dockerの連携を行うプラグインも近年活発に開発が進められている。今回紹介する「Docker Plugin」を導入することで、ビルドの実行時に自動的に指定したコンテナを立ち上げ、作業が完了したらコンテナを終了する、といった作業を自動化することが可能だ。

 本記事では、まず基本となるJenkinsの「マスター/スレーブ」構成について紹介し、続いてDocker Pluginを利用してDockerコンテナ内でビルドを行う設定について解説する。

Jenkinsのスレーブ設定

 Jenkinsがインストールされたサーバー以外のマシンでビルドを行うためには、まずJenkinsにそのマシンをスレーブとして登録しておく必要がある。スレーブの登録は、「Jenkinsの管理」画面内の「ノードの管理」画面で行える(図1、2)。

図1 「Jenkinsの管理」画面
図1 「Jenkinsの管理」画面
図2 Jenkinsの「ノード」画面
図2 Jenkinsの「ノード」画面

 「ノード」画面では、デフォルトで「master」というノードが登録されている。これはJenkinsをインストールしているサーバーそのものを指している。

 新たにスレーブとなるノードを追加するには、画面左側のメニュー内にある「新規ノード作成」をクリックする。すると「新規ノード作成」画面が表示されるので、ここでノード名を入力し、「Permanent Agent」が選択されているのを確認して「OK」をクリックするとノードが登録される(図3)。なお、このときインストールされているプラグインによってはこれ以外の選択肢が表示される場合もあるが、その場合も「Permanent Agent」を選択すれば良い。

図3 「新規ノード作成」画面
図3 「新規ノード作成」画面

 続いてノードの情報を登録する画面が表示される(図4)。

図4 ノードの設定画面
図4 ノードの設定画面

 ここでまず指定しておくべき項目は「リモートFSルート」だ。Jenkinsは必要な各種ファイルをここで指定したディレクトリ以下にコピーするほか、ビルド作業もこのディレクトリ以下で実行される。また、「用途」では「このマシーンを特定ジョブ専用にする」を選択しておこう。これにより、明示的にこのノードを使用するよう指定された場合のみこのノードで作業が行われるようになる。

 「起動方法」では「SSH経由でUnixマシンのスレーブエージェントを起動」を選択する。これを選択するとホストや認証情報の設定が可能になるので、「ホスト」にはスレーブとして使用するマシンのIPアドレスもしくはホスト名を、認証情報にはSSHログインに使用する認証情報を指定しておく。認証情報の設定については前回記事で説明しているので、詳しくはそちらを参照して欲しい。

 スレーブ側ではこの認証情報に対応するユーザーでSSHログインを行えるよう設定しておこう。この例では、Jenkinsがインストールされたマシン(マスター)上の「jenkins」ユーザーを使ってスレーブにSSHログインが実行される。そのため、スレーブとなるマシン上にもjenkinsユーザーを作成し、また公開鍵認証を利用する場合は公開鍵の登録なども行っておく。

 「ラベル」では、ノード指定などに使用できるラベル情報を付与できる。複数のノードを登録している場合、共通のラベルを指定することで空いているノードを自動で選択して使用するといったことが可能だが、ノードの指定はノード名でも可能なので、特に指定しなくても構わない。

 設定が完了したら、「保存」をクリックして設定を反映させておく。続いて「ノード」画面を確認すると、追加したノードの状態が表示されるはずだ。

 なお、ノードの登録時には指定された認証情報でログインできるかの確認が行われ、ログインに成功したらその場でスレーブに必要な各種ソフトウェアのインストールなどが行われる。これらの作業に失敗した場合、図5のようにアイコンに「×」が表示される。

図5 「ノード」画面でアイコンに「×」が表示されているノードは利用できない状態になっている
図5 「ノード」画面でアイコンに「×」が表示されているノードは利用できない状態になっている

 エラーが発生した場合は、そのノードのノード名をクリックし、続けて画面左メニューの「ログ」をクリックすることで、ログを確認できる(図6)。この情報をヒントに、問題点を調べて見ると良いだろう。

図6 ノードを選択し、「ログ」をクリックするとログを確認できる
図6 ノードを選択し、「ログ」をクリックするとログを確認できる