2.2. Java
2.2.1. 概要
OpenShift Online は、Java アプリケーションをビルドするための S2I ビルダーイメージを提供します。このビルダーイメージは、アプリケーションソースまたはバイナリーアーティファクトを取得し、Maven を使用してソースをビルドし (ソースが提供されている場合)、アーティファクトを必要な依存関係でアセンブルし、Java アプリケーションを含む新規の実行可能な新規イメージを作成します。結果として生成されるイメージは OpenShift Online で実行したり、Docker で直接実行したりできます。
ビルダーイメージは、メインクラスで実行される Mavenベースの Java スタンドアロンプロジェクトで使用することを目的としています。
2.2.2. バージョン
現在のバージョンの Java S2I ビルダーイメージは、OpenJDK 1.8、Jolokia 1.3.5、および Maven 3.3.9-2.8 をサポートします。
2.2.3. イメージ
RHEL 7 イメージは、Red Hat レジストリーから入手できます。
$ docker pull registry.access.redhat.com/redhat-openjdk-18/openjdk18-openshift
イメージは、redhat-openjdk18-openshift
イメージストリームで使用することができます。
2.2.4. ビルドプロセス
S2I は、ソースコードをコンテナーに挿入し、コンテナーにソースコードの実行を準備をさせることで、実行準備が整ったイメージを生成します。S2I では、以下の手順を実行します。
- ビルダーイメージからコンテナーを起動します。
- アプリケーションソースをダウンロードします。
- ビルダーイメージコンテナーにスクリプトとアプリケーションソースをストリーミングします。
- (ビルダーイメージから) assemble スクリプトを実行します。
- 最終的なイメージを保存します。
ビルドプロセスの詳細のまとめについては、「S2I ビルドプロセス」を参照してください。
2.2.5. 設定
デフォルトで、Java S2I ビルダーイメージは Maven を使用して以下のゴールおよびオプションでプロジェクトをビルドします。
mvn -Dmaven.repo.local=/tmp/artifacts/m2 -s /tmp/artifacts/configuration/settings.xml -e -Popenshift -DskipTests -Dcom.redhat.xpaas.repo.redhatga -Dfabric8.skip=true package -Djava.net.preferIPv4Stack=true
これらのデフォルトに基づいて、ビルダーイメージはプロジェクトをコンパイルし、テストを実行せずにすべての推移的な依存関係を出力ディレクトリーにコピーします。また、プロジェクトに openshift
という名前のプロファイルがある場合、これはビルドについてアクティベートされます。
以下の環境変数を指定すると、これらのデフォルトのゴールおよびオプションを上書きできます。
変数名 | 説明 |
---|---|
| JAR ファイルが複数モジュールのビルド用に作成されるターゲットへの相対パス。 |
| Java の引数として使用するメインクラス。これは、.s2i/environment ファイルでプロジェクト内の Maven プロパティーとして指定することもできます (docker.env.Main)。 |
| mvn コマンドに渡す引数。 |
2.2.6. Java アプリケーションのビルドとデプロイ
同じ S2I ビルダーイメージを使用して、ソースまたはバイナリーアーティファクトから Java アプリケーションをビルドできます。
2.2.7. ソースからのビルドとデプロイ
Java S2I ビルダーイメージは、ソースリポジトリーに対して oc new-app
を実行してアプリケーションをソースからビルドするために使用できます。
$ oc new-app redhat-openjdk18-openshift~https://github.com/jboss-openshift/openshift-quickstarts --context-dir=undertow-servlet
デフォルトで、テストは実行されません。アプリケーションをビルドし、ビルドの一部としてテストを実行するには、以下のコマンドのようにデフォルトの MAVEN_ARGS
を上書きします。
$ oc new-app redhat-openjdk18-openshift~<git_repo_URL> --context-dir=<context-dir> --build-env='MAVEN_ARGS=-e -Popenshift -Dcom.redhat.xpaas.repo.redhatga package'
Java プロジェクトが複数の Maven モジュールで構成される場合、アーティファクトの出力ディレクトリーを明示的に指定すると便利です。Maven プロジェクトがアーティファクトを出力するディレクトリーを指定すると、S2I ビルドがこれらを取得できるようになります。
ビルドするモジュールおよびアーティファクトの出力ディレクトリーを指定するには、以下のコマンドを使用します。
$ oc new-app redhat-openjdk18-openshift~<git_repo_URL> --context-dir=<context-dir> --build-env='ARTIFACT_DIR=relative/path/to/artifacts/dir' --build-env='MAVEN_ARGS=install -pl <groupId>:<artifactId> -am'
2.2.8. バイナリーアーティファクトからのビルドおよびデプロイ
Java S2I ビルダーイメージは、指定するバイナリーアーティファクトを使用してアプリケーションをビルドするために使用できます。これを実行するには、最初に oc new-build
コマンドを使用して新規のバイナリービルドを作成します。
$ oc new-build --name=<application-name> redhat-openjdk18-openshift --binary=true
次に、oc start-build
コマンドを使用してビルドを開始し、ローカルマシンでバイナリーアーティファクトへのパスを指定します。
$ oc start-build <application-name> --from-dir=/path/to/artifacts --follow
最後に、アプリケーションを作成するために oc new-app
コマンドを使用します。
$ oc new-app <application-name>
2.2.9. 追加情報およびサンプル
- 追加情報および例は、Red Hat JBoss Middleware のドキュメントを参照してください。