目次


Jenkins を使って継続的デリバリー・フレームワークをセットアップする

Comments

はじめに

継続的デリバリー・プロセスでは、フレームワークをセットアップすることが重要です。セットアップしたフレームワークによって、DevOps の効率性や、継続的デリバリー・プロセスで実行できる内容も決まってきます。

この記事では、Jenkins について説明し、以下のデモンストレーションを行います。

  • Jenkins を使用して継続的デリバリー・フレームワークをセットアップする方法
  • Jenkins の知識を継続的デリバリー・フレームワークに適用する方法
  • Jenkins を使用して継続的デリバリー・フレームワークを実装する方法

対象読者

この記事で対象とする読者は、継続的デリバリーや継続的自動化テストに取り組んでいるソフトウェア・エンジニアです。この記事の手順に従うには、以下のことを理解している必要があります。

  • スクリプト開発
  • ソフトウェア開発プロセス

Jenkins の概要

Jenkins は、ソフトウェア開発で最もよく使われている継続的インテグレーション・ツールです。反復型ジョブを実行するこの自動化フレームワークでは、リモート・システム上でのコマンドの開始を管理、監視できるほか、コマンド・ラインから実行可能なあらゆる処理を行うことができます。Jenkins は e-メール、TestNG、およびその他のツールをサポート・プラグインによって統合します。

Jenkins をインストールしたら (Jenkins をまだインストールしていない場合は、囲み記事を参照)、ブラウザーで http://yourjenkinsmasterhost:8080 を指定して Jenkins にアクセスします。

Jenkins はマスター/スレーブ・モードをサポートしています。プロジェクトをビルドするというワークロードは、複数のスレーブ・ノードに委任されます。これにより、単一の Jenkins システムで多数のプロジェクトをホストすることや、ビルド/テストに必要な異なる複数の環境を提供することができます。

Jenkins のセットアップと有効化

Jenkins を使えるようにするには、その前に Jenkins を設定する必要があります。この記事では、マスター/スレーブのセットアップ方法、プラグインのインストール方法、プロジェクトの設定方法、そして変数/プロパティーの設定方法を説明します。

マスター・マシンとスレーブ・マシンのセットアップ

最初に、Jenkins をマスター・マシン (Linux または Windows) にインストールします。その後、Jenkins マスターを利用してスレーブ (Windows または Linux) をセットアップします。

Jenkins には SSH クライアント実装が組み込まれており、Jenkins はこの SSH クライアントを使用して、リモート sshd やスレーブ・エージェントと通信します。マスターとスレーブとの間で通信する方法はいくつかあります。

  • UNIX スレーブの場合は、SSH を使用します。スレーブで必要となるのは、SSH と JRE のみです。
  • Windows の場合は、DCOM (Distributed Component Object Model: 分散コンポーネント・オブジェクト・モデル) を使用します。
  • マスターからスレーブが見えない場合は、Java Web Start を介し、別個のソケット接続を使用します。

Linux にマスターをインストールする

Linux マシンにマスターをインストールする場合は、リスト 1 に記載されているコマンドを入力します。

リスト 1. Linux にマスターをインストールする
sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
sudo yum install jenkins

Windows にマスターをインストールする

Windows マシンにマスターをインストールする場合は、リスト 2 のコマンドを入力します。

リスト 2. Windows にマスターをインストールする
java -jar jenkins.war

上記のコマンドを実行した後、http://<hostname>:8080/ にアクセスし、「Manage Jenkins (Jenkins の管理)」 > 「Install as Windows Service (Windows サービスとしてインストール)」 > 「Install (インストール)」の順にクリックします。

スレーブをセットアップする

http://<JenkinsMasterHost>:8080/ にアクセスして「Manage Jenkins (Jenkins の管理)」 > 「Manage Jenkins (ノードの管理)」 > 「New Node (新規ノード)」の順に選択し、スレーブ・ホストに応じたスレーブ情報を設定します。スレーブ・マシンへの Jenkins のインストールは、Jenkins マスターによってサポートされます。

Windows スレーブの場合は、以下に示すコマンドを追加で実行する必要があります。

リスト 3. 追加コマンド (Windows スレーブの場合)
sc.exe create "<serviceKey>" start= auto binPath= "<path to jenkins-slave.exe>" 
DisplayName= "<service display name>"

<serviceKey> は、サービスを定義するレジストリー・キーの名前です。<service display name> は、サービス・マネージャー・インターフェースにおいてサービスを特定するラベルです。

プラグインの管理

プラグインも Jenkins の重要な機能です。現在、Jenkins では 1000 を超えるプラグインをサポートしています。これらのプラグインは、ソース管理用、レポートのビルド用、ツールのビルド用などといったカテゴリーに分けることができます。プラグインを使用すると、Jenkins のさまざまなジョブを監視、デプロイ、設定することができます。プラグインを管理するには、https://JenkinsMasterHost:8080 にアクセスして、「Manage Jenkins (Jenkins の管理)」 > 「Manage Plugins (プラグインの管理)」の順に選択します。表示されるページには、以下の 4 つのタブがあります。

  • Updates (アップデート): アップデートを利用できるインストール済みプラグインが表示されます。
  • Available (利用可能): インストール可能なプラグインが表示されます。
  • Installed (インストール済み): インストール済みプラグインが表示されます。
  • Advanced (高度な設定): プラグインを管理するために使用するタブです。

インターネットからプラグインをインストールする

Jenkins マスターがインターネットにアクセスできる場合、プラグインをインストールするのは簡単です。インストールするプラグインは、「Available (利用可能)」タブで選択します。「Installed (インストール済み)」タブでは、プラグインを削除することができます。「uninstall (アンインストール)」ボタンをクリックすると、プラグインが削除されます。

手作業でプラグインをインストールする

Jenkins マスターがインターネットにアクセスできない場合は、手作業でプラグインをインストールすることができます。インストールするプラグインを検索し、ダウンロードした *.hpi/*.jpi ファイルを $JENKINS_HOME/plugins ディレクトリーに保存します。その後、Jenkins を再起動すると、プラグインが利用可能になります。

Jenkins プロジェクト

Jenkins でサポートされているプロジェクトには、フリー・スタイル、Maven、マルチ、外部ジョブという 4 つのタイプがあります。このうち、Jenkins で中心となる機能は、フリー・スタイル・プロジェクトです。フリー・スタイル・プロジェクトは、SCM 内であらゆるビルド・システムと組み合わせることができます。またソフトウェアのビルド以外の目的に使用することもできます。

プロジェクトの設定

プロジェクトを作成するには、https://JenkinsMasterHost:8080 にアクセスして「New Item (新規ジョブ作成)」を選択し、「Item name (ジョブ名)」とタイプを指定します。

「Item name (ジョブ名)」は、プロジェクト設定ページでは「Project name (プロジェクト名)」とも呼ばれています。項目には 4 つのタイプがあり、「Copy existing item (既存ジョブのコピー)」オプションを選択することもできます (図 1 を参照)。「OK」をクリックして、プロジェクト設定ページを開きます。

図 1. 新規ジョブの作成
新規ジョブ作成ウィンドウに表示されたラジオ・ボタンのスクリーン・ショット
新規ジョブ作成ウィンドウに表示されたラジオ・ボタンのスクリーン・ショット

プロジェクト設定ページで必要な情報は以下のとおりです。

Project name (プロジェクト名): プロジェクト名を更新すると、項目名も更新されます。

Description (説明): ジョブの説明。

Strategy (ストラテジー): ログ・ストラテジー、つまり保持するログの数を指定します。

Parameterized (パラメーター化): プロジェクトの変数を定義します。変数には異なるタイプ (ファイル・パラメーター、テキスト・パラメーター、ストリング・パラメーターなど) があります。

Where (場所): プロジェクトを実行できる場所を制限します。

Advance configuration (高度な設定): 詳細な指定で、プロジェクトのビルド方法を制御します。

インストール対象として選択したプラグインによって、プロジェクトで使用できるカテゴリーと機能が変わってきます。例えば、以下のカテゴリーと機能があります。

  • Source Code Management (ソースコード管理): ソース・コードを管理するツール。
  • Build triggers (ビルド・トリガ): ビルドをトリガーするメソッド。
  • Build (ビルド): ビルドはプロジェクトの最も重要な部分です。プロジェクトを実行するための正確なステップを指定しなければなりません。一般的なステップでは、Windows の場合は DOS コマンドを使用し、Linux の場合はシェル・コマンドを使用します。
  • Post-build actions (ビルド後のアクション): ビルド後に実行するアクション。ビルド後の一般的なアクションには、e-メールの送信、他のビルドのトリガー、結果レポートの発行などがあります。

設定が完了したら、「Save (保存)」をクリックします。保存されたプロジェクトは、https://JenkinsMasterHost:8080 にアクセスして「Jenkins」 > 「All (すべて)」の順に選択すると、一覧表示されます。

プロジェクトのトリガー

Jenkins では、プロジェクトのビルドを自動的にトリガーすることも、手作業でトリガーすることもできます。ビルドをトリガーするには、異なる複数のメカニズムがあります。ビルドを自動的にトリガーする場合は、プロジェクトの設定をする際に、「Build Triggers (ビルド・トリガ)」で自動トリガーのオプションを定義することができます。選択可能なオプションは以下のとおりです。

  • Build after other projects are built (他のプロジェクトのビルド後にビルド): プロジェクトを設定したら、このプロジェクトをビルドする前に他のプロジェクトをビルドするかどうかを定義することができます。プロジェクトが他のプロジェクトに依存している場合は、このオプションを選択します。
  • Trigger builds remotely (e.g., from scripts) (リモートからビルド (例: スクリプトから)): このオプションでは、プロジェクトのビルドを他のシステムやホストからトリガーします。例えば、e-メールを介してプロジェクトのビルドをトリガーすることや、スクリプトからビルド・リクエストを送信することができます。
  • Build periodically (定期的に実行): このオプションを選択する場合は、設定の中で定義されたプロジェクトを定期的にビルドするためのスケジュールを作成します。
  • Poll SCM (SCM をポーリング): このオプションを選択した場合、ソースが変更されるとプロジェクトのビルドが行われます。このオプションでは、Jenkins がリビジョン管理システムをポーリングする頻度を指定します。ソース・コードが変更されていれば、プロジェクトがビルドされます。
図 2. 「Build Triggers (ビルド・トリガ)」のオプション
「Build Triggers (ビルド・トリガ)」のオプションを示す画面のスクリーン・ショット
「Build Triggers (ビルド・トリガ)」のオプションを示す画面のスクリーン・ショット

プロジェクト分散

委任の正確な動作は、各プロジェクトの設定によって異なります。プロジェクトの設定で、「Restrict where this project can be run (実行するノードを制限)」オプションが選択されている場合、指定されたマシン上でのみプロジェクトが実行されます。そのように設定されていないプロジェクトは、スレーブ間で自由にローミングすることができます。このように、委任の動作はすべて設定によって決まります。

現在、Jenkins では以下のプロジェクト分散ストラテジーを採用しています。

  • プロジェクトの設定で、「Restrict where this project can be run (実行するノードを制限)」オプションが選択されている場合、プロジェクトは指定されたマシン上でのみ実行されます。
  • Jenkins は、プロジェクトを、そのプロジェクトが前回ビルドされたコンピューター上でビルドしようとします。
  • Jenkins は長時間かかるビルドをスレーブに移そうとします。

変数/プロパティーの設定

グローバル・プロパティー

環境変数 (プロパティーの名前と値を定義) またはツールの場所は、グローバル・プロパティーに設定します。グローバル・プロパティーを設定するには、http://<JenkinsMasterHost>:8080 にアクセスし、「Manage Jenkins (Jenkins の管理)」 > 「Configure System (システムの設定)」の順に選択します。これらのプロパティーは、すべての Jenkins プロジェクトで使用することができます。

環境変数

環境変数は、プロジェクト内で参照することができます。「Environment variables (環境変数)」ボックスを選択して、変数の「name (キー)」「value (値)」を定義します (図 3 を参照)。

図 3. 環境変数の定義
環境変数のキーと値のテキスト・フィールドのスクリーン・ショット
環境変数のキーと値のテキスト・フィールドのスクリーン・ショット

ツールの場所

「Tool Locations (ツールパス)」チェック・ボックスを選択します。「Name (ツール)」フィールドではドロップダウンからツールの名前を選択し、Home (ホーム)」フィールドではツールのホーム・ディレクトリーを定義します。定義されたツールは、プロジェクト内で参照することができます。

図 4. ツールパスの定義
ツールパスの「Name (ツール)」フィールドと「Home (ホーム)」フィールドのスクリーン・ショット
ツールパスの「Name (ツール)」フィールドと「Home (ホーム)」フィールドのスクリーン・ショット

プロジェクトのローカル・プロパティー

プロジェクトのローカル・プロパティーは、プロジェクト内でのみ有効です。プロジェクトを設定する際に、「This build is parameterized (ビルドのパラメーター化)」オプションを選択すると (図 5 を参照)、パラメーターを名前/値のペアとして追加する機能が有効になります。これらのパラメーターは、プロジェクトのローカル・プロパティーとして使用することができます。

図 5. ローカル・プロパティーの設定
ローカル・プロパティーを設定する画面のスクリーン・ショット
ローカル・プロパティーを設定する画面のスクリーン・ショット

実践: 継続的デリバリー・フレームワークの構造とプロセス

継続的デリバリーの目的は、効率的かつ高品質の手法でソフトウェアを開発、テスト、デプロイし、最終的に本番環境へデリバリーできるようにすることです。継続的デリバリーでは、ソフトウェア・システムのいずれかの部分 (インフラストラクチャー、アプリケーション、カスタマイズ・データのどのレベルであっても) に変更が加えられると、その変更は常に特定のデリバリー・パイプラインによって本番環境に適用されます。

プロセス

継続的デリバリーでは、変更セットを迅速かつ自動的にデプロイする必要があります。デプロイメント (デリバリー) はいくつかのステップで行われます。標準的なプロセスは以下のとおりです。

  • 変更したコードを開発者が提供する
  • ソース管理ツールがビルドを実行する
  • 自動化テストを実行する
  • ビルドをインストールする

図 6 には、この継続的デリバリー・プロセスが示されています。スケジューリングされた時刻になると、Jenkins の最初のプロジェクトが開始されます。

プロジェクト 1
このプロジェクトの最初のタスクは、IBM Rational Team Concert などのソース管理ツールから、ソース・コードをダウンロードすることです。プロジェクトが失敗すると、失敗を通知する e-メールが送信されて、他のすべてのプロジェクトが停止されます。プロジェクトが正常に完了した場合は、次のプロジェクトがトリガーされます。
プロジェクト 2
IBM Security AppScan によって、プロジェクト 1 からダウンロードされたソース・コードにセキュリティーの問題があるかどうかの確認が行われます。
プロジェクト 3
AppScan によるプロジェクトが完了すると、ビルドを開始します。
プロジェクト 4
ビルドが正常に完了すると、次のプロジェクトでは、そのビルドを BVT (Build Verification Test: ビルド検証テスト) 環境にインストールします。
プロジェクト 5
BVT 環境で BVT テスト・ケースを実行します。BVT に合格すると、Jenkins は開発環境とテスト環境の両方でビルドのインストールを開始します (プロジェクト 6 および 7)。
プロジェクト 6
ビルドを開発環境にインストールし、e-メール通知を送信します。ビルドを開発環境にインストールするプロジェクトは、開発者が統合作業や開発作業を行えるように環境を準備します。
プロジェクト 7
ビルドをテスト環境にインストールします。ビルドがテスト環境にインストールされると、Jenkins はプロジェクト 8 をトリガーして FVT (機能検証テスト: Functional Verification Test) を実行します。
プロジェクト 8
FVT は、多数のテストが含まれる自動テストのリストです。FVT に合格すると、ビルドは本番環境にインストールされます (プロジェクト 9)。
プロジェクト 9
本番環境は、クラウド上または IBM Softlayer 上にある顧客のローカル・サーバーにインストールすることができます。内部ユーザーと外部ユーザーの両方がアクセス可能になります。

図 6 に示されているのは、継続的デリバリー・フレームワークのプロセスです。プロジェクトが正常に完了すると、次のプロジェクトがトリガーされます。プロジェクトが失敗した場合、このプロセスは終了し、e-メールがサブクライバーに送信されます。

図 6. 継続的デリバリー・フレームワークのプロセス
継続的デリバリー・フレームワークのフロー図
継続的デリバリー・フレームワークのフロー図

継続的デリバリー・フレームワークのデプロイメント・トポロジー

図 7 の左側に示されているのは、従来の開発プロセスでのデプロイメントです。従来は、開発者が変更セットをソース管理サーバー (この例では Rational Team Concert (RTC)) にコミットした後、ビルド・サーバーがビルドを行います。

図 7 の右側に示されているのは、継続的デリバリー・プロセスです。Jenkins が追加されると、Jenkins マスターが存在するようになり、そのサーバーに Rational Team Concert のbuildtoolkit がインストールされます。Rational Team Concert プラグインにインストールされた Jenkins は マスターは、buildtoolkit を使用して Rational Team Concert からソース・コードをダウンロードし、さらに buildtoolkit をトリガーしてビルドを行います。AppScan プロジェクトと BVT プロジェクトも Jenkins マスター上で実行されます。開発環境、テスト環境、本番環境は、いずれも Jenkins スレーブとして機能します。Jenkins マスターによって制御されるこれらの環境が、インストール・プロジェクトを実行します。テスト環境では、機能検証テスト・プロジェクトも実行します。

注:
マシンが果たす役割はそれぞれに異なるため、プロジェクトをコンピューターに関連付けることで、タスクを追跡しやすくなります。

図 7. 継続的デリバリー・フレームワークのトポロジー
従来の開発プロセスでのデプロイメント・トポロジーと Jenkins を使用した継続的デリバリー・プロセスでのデプロイメント・トポロジー
従来の開発プロセスでのデプロイメント・トポロジーと Jenkins を使用した継続的デリバリー・プロセスでのデプロイメント・トポロジー

まとめ

これで、Jenkins を使用して継続的デリバリー・フレームワークをセットアップする方法を理解していただけたはずです。このフレームワークによってビルドが自動的にデプロイされるようにすれば、開発者とテスト担当者の貴重な時間を節約することができます。また、このフレームワークはプロセスの問題や欠陥を早期に見つける上でも役立ちます。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=DevOps, Rational
ArticleID=1005825
ArticleTitle=Jenkins を使って継続的デリバリー・フレームワークをセットアップする
publish-date=05212015