CI(継続的インテグレーション)とは
Jenkinsの前に、まず「CI(継続的インテグレーション)」について説明します。
CIとは一言で言えば、日々行っていることで自動化できるものは自動化して素早い開発を行おうということです。例えば、次のようなことを毎日行っていないでしょうか?
- アプリケーションのビルド、およびサーバーへのアプリケーションのデプロイ
- テストのカバレッジの収集
- FindBugsやPMDを使用した静的解析、およびレポート作成
これらは非常に重要なことです。毎日、最新版のアプリケーションをサーバーにデプロイすることで、最新のアプリケーションに対するテストを行えます。テストのカバレッジを毎日収集することで、テストの進捗状況を細かく確認することができます。静的解析を行うことで、手動では見つけにくいバグや品質低下を発見することができます。これらを毎日人力で行うことは非常に手間です。Jenkinsはそれらを自動化する手助けをしてくれます。
Jenkinsとは
Jenkinsの機能について一言で言えば、高機能なGUIのついたcronです。決められた時間に決まったジョブを定期実行してくれます。
Jenkins以外にもCI(継続的インテグレーション)ツールはたくさんあり、Jenkins以外を利用するという話もあるかもしれません。なぜJenkinsを使用するのでしょうか。Jenkinsは拡張性に優れています。プラグインを作成、利用することで機能を拡張できます。
IBMのWebSphere Application SeverではJenkinsの機能拡張を利用し、サーバーへのアプリケーションのデプロイを自動で行える仕組みが提供されています。今回はその機能を利用しアプリケーションのビルドからサーバーへのデプロイまでを自動化し、定期実行できるようにしたいと思います。
環境構築
ここから環境構築を行っていきます。
使用する環境
この記事執筆は以下の環境で行っています。
- Windows 8.1
- JDK 7 u65
- Maven 3.2.2
- Jenkins 1.573
- TotoiseSVN 1.8.7(+コマンドラインツール)
- WebSphere Application Server Liberty Core 8.5.5.2無償評価版
WebSphere Application Server Liberty Core 8.5.5.2無償評価版のインストール方法については、同じCodeZineの記事である『軽量・高速・安価で、安定性と信頼性も兼ね備えたWebSphere Application Serverの「Liberty Core」を使ってみた』を参照してください。
JDK 7 u65とTotoiseSVN 1.8.7(+コマンドラインツール)については導入が容易なため、説明を割愛します。JDK 7は「C:¥Program Files¥Java¥jdk1.7.0_65」に導入されているものとしています。より新しいUpdateを使用する場合は、導入ディレクトリに読みかえてください。
ここでは「Mavenのインストール」から説明します。
なぜ「Java SE 8」ではなく「Java SE 7」なのか
2014年3月にJava SE 8がリリースされていますので、現時点での最新版ということであれば、JDK 8を利用することになります。なぜJDK 7を利用するのかというと、本記事執筆時点(2014年7月)ではJava SE 8に完全対応したJava EEサーバーが存在しないからです。WebSphereだけでなく、WebLogicやJBossASについても不具合が発生します。WebSphere Application Server Liberty Coreも、公開されている次期ベータ版からJDK 8対応が行われているのですが、この記事で使用する8.5.5.2ではJDK 7を使用する必要があります。
Mavenのインストール
Mavenはビルドツールのデファクトスタンダードです。コマンドラインで実行することができ、jarの依存性を自動的に解消してくれる非常に便利なツールです。Eclipseを使用している場合はm2eプラグインを使用することで、Mavenでビルドができるようになります。
Mavenはhttp://maven.apache.org/からダウンロードできます。左のメニューから「Get Maven」-「download」をクリックしてダウンロード画面に移動し、「Maven 3.2.2 (Binary zip)」をダウンロードします。ダウンロード後は任意の場所にzipを解凍します。
環境変数の設定
環境変数に使用するライブラリの情報をシステム環境変数に追加していきます。
1. JAVA_HOMEを設定します。
2. M2_HOMEを設定します。
3. PATHを通します。
PATHの先頭に「%M2_HOME%¥bin」と「%JAVA_HOME¥bin」を追加してください。
ここまできたらコマンドプロンプトを立ち上げ、java -versionの結果がjava version "1.7.0_65"になっていることと、mvnのコマンドが見つかることを確認してください。
Java SE 8のインストーラーがjavaコマンドをシステム領域にコピーするため、PATHは先頭に追加しないとJava SE 7ではなくJava SE 8が起動してしまいます。
4. LIBERTY_HOMEを設定します。
必須ではないですが、ツールのパスが固定できるため、WebSphere Application Server Liberty Coreをインストールしたフォルダを設定します。
WebSphere Application Server Liberty Coreをまだインストールしていない場合は、先にインストールしてください。
Mavenの動作確認
Mavenの設定が正しく行われていることを確認します。Subversionを利用して
https://github.com/megascus/Liberty-Jenkins/trunk/@HEAD
からチェックアウトを行ってください。
コマンドラインでは以下のように入力します。
svn co https://github.com/megascus/Liberty-Jenkins/trunk/@HEAD
チェックアウトを行ったらコマンドプロンプトからpom.xmlが入っているフォルダにアクセスします。
その後、以下のコマンドを入力してください。
mvn package
BUILD SUCCESSFULと表示されれば成功です。targetというフォルダに、liberty.warが作成されています。この後の手順では、このファイルを使用して動作確認を行います。
今回のアプリケーションは、Java EE 6開発に必要な最低限の依存関係のみを定義したものとなっています。雛形としてEclipse上で開きたい場合は以下のコマンドを実行することでEclipse用のプロジェクトファイルが生成され、Eclipseで開けるようになります。
mvn eclipse:eclipse
Java EE 5までは、EJBを含める場合にearファイルの作成が必須でした。しかし、Java EE 6からはwarファイルにEJBを含められるようになっています。今後はearファイルを作成しない方向になっていくでしょう。
サーバーの追加
自動デプロイを行うサーバーを作成します。以下のコマンドを入力してください。
%LIBERTY_HOME%\bin\server create liberty
「%LIBERTY_HOME%¥usr¥servers¥liberty」フォルダが作成されます。
サーバーへのアプリケーションのデプロイ
先ほど作成したliberty.warを「%LIBERTY_HOME%¥usr¥servers¥liberty¥dropins」に配置します。配置後、以下のコマンドを実行することでアプリケーションが起動します。
%LIBERTY_HOME%\bin\server start liberty
ブラウザで http://localhost:9080/libertyにアクセスをし、起動していることを確認してください。
Windows 8でJDK 7 u65を使用すると起動に失敗します。JDK 7 u65においてシステム環境変数のos.nameが違う値を返すようになっていることによる問題です。JDK 7 u25など、古いバージョンではこの問題は発生しません。
この問題を解決するためのファイルをjvm.optionsとして用意しました。rawボタンを右クリックして「リンク先を保存」を選択することでファイルをダウンロードできます。「%LIBERTY_HOME%¥usr¥servers¥liberty¥jvm.options」として保存してください。保存後、もう一度コマンドを実行すればアプリケーションが起動するはずです。
起動後は以下のコマンドを実行することでアプリケーションが終了します。
%LIBERTY_HOME%\bin\server stop liberty
これで動作確認が終わり、環境構築が完了しました。