5.3. JBoss EAP でのユーザー開発レイヤーのプロビジョニング
Red Hat から利用可能なレイヤーのプロビジョニングを行うに加え、開発するカスタムレイヤーをプロビジョニングできます。
手順
Galleon Maven プラグインを使用してカスタムレイヤーを構築します。
詳細は、Maven プロジェクトの準備 を参照してください。
- アクセス可能な Maven リポジトリーにカスタムレイヤーをデプロイします。
カスタム Galleon 機能パック環境変数を使用して、S2I イメージビルドプロセス中に Galleon 機能パックとレイヤーをカスタマイズできます。
Galleon 機能パックとレイヤーのカスタマイズの詳細は、S2I ビルド中におけるカスタム Galleon 機能パックの使用 を参照してください。
オプション: ユーザー定義のレイヤーとサポートされる JBoss EAP レイヤーを参照するカスタムプロビジョニングファイルを作成し、これをアプリケーションディレクトリーに保存します。
カスタムプロビジョニングファイルの作成に関する詳細は、JBoss EAP のカスタムプロビジョニングファイル を参照してください。
S2I プロセスを実行して、OpenShift で JBoss EAP サーバーをプロビジョニングします。
詳細は、S2I ビルド中におけるカスタム Galleon 機能パックをの使用 を参照してください。
5.3.1. JBoss EAP のカスタム Galleon レイヤーのビルドと使用
カスタム Galleon レイヤーは、JBoss EAP 7.4 Beta で実行するように設計された Galleon 機能パック内にパッケージ化されています。
Openshift では、JBoss EAP 7.4 サーバー用の MariaDB ドライバーやデータソースなどをプロビジョニングするためのレイヤーを含む Galleon 機能パックをビルドして使用できます。レイヤーには、サーバーにインストールされているコンテンツが含まれています。レイヤーは、サーバーの XML 設定ファイルを更新し、コンテンツをサーバーのインストールに追加できます。
このセクションでは、JBoss EAP 7.4 サーバーに MariaDB ドライバーとデータソースをプロビジョニングするためのレイヤーを含む Galleon フィーチャーパックを OpenShift で構築して使用する方法について説明します。
5.3.1.1. Maven プロジェクトの準備
Galleon 機能パックは、Maven を使用して作成されます。この手順には、新しい Maven プロジェクトを作成する手順が含まれています。
手順
新しい Maven プロジェクトを作成するには、次のコマンドを実行します。
mvn archetype:generate -DarchetypeGroupId=org.codehaus.mojo.archetypes -DarchetypeArtifactId=pom-root -DgroupId=org.example.mariadb -DartifactId=mariadb-galleon-pack -DinteractiveMode=false
ディレクトリー
mariadb-galleon-pack
で、pom.xml
ファイルを更新して Red Hat Maven リポジトリーを含めます。<repositories> <repository> <id>redhat-ga</id> <name>Redhat GA</name> <url>https://maven.repository.redhat.com/ga/</url> </repository> </repositories>
pom.xml
ファイルを更新して、EAP Galleon 機能パックと MariaDB ドライバーへの依存関係を追加します。<dependencies> <dependency> <groupId>org.jboss.eap</groupId> <artifactId>wildfly-ee-galleon-pack</artifactId> <version>7.4.4.GA-redhat-00011</version> <type>zip</type> </dependency> <dependency> <groupId>org.mariadb.jdbc</groupId> <artifactId>mariadb-java-client</artifactId> <version>3.0.5</version> </dependency> </dependencies>
pom.xml
ファイルを更新して、Galeon 機能パックのビルドに使用される Maven プラグインを含めます。<build> <plugins> <plugin> <groupId>org.wildfly.galleon-plugins</groupId> <artifactId>wildfly-galleon-maven-plugin</artifactId> <version>5.2.11.Final</version> <executions> <execution> <id>mariadb-galleon-pack-build</id> <goals> <goal>build-user-feature-pack</goal> </goals> <phase>compile</phase> </execution> </executions> </plugin> </plugins> </build>
5.3.1.2. 機能パックコンテンツの追加
この手順は、カスタム Galleon 機能パック (MariaDB ドライバーとデータソースレイヤーを含む機能パックなど) にレイヤーを追加するのに役立ちます。
前提条件
- Maven プロジェクトを作成しました。詳細は、Maven プロジェクトの準備 を参照してください。
手順
-
カスタム機能パック Maven プロジェクト内に
src/main/resources
ディレクトリーを作成します。Maven プロジェクトの準備 を参照してください。このディレクトリーは、機能パックのコンテンツを含むルートディレクトリーです。 -
ディレクトリー
src/main/resources/modules/org/mariadb/jdbc/main を
作成します。 main
ディレクトリーに、次の内容のmodule.xml
という名前のファイルを作成します。<?xml version="1.0" encoding="UTF-8"?> <module name="org.mariadb.jdbc" xmlns="urn:jboss:module:1.8"> <resources> <artifact name="${org.mariadb.jdbc:mariadb-java-client}"/> 1 </resources> <dependencies> 2 <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
-
ディレクトリー
src/main/resources/layers/standalone/を
作成します。これは、ガレオン機能パックが定義しているすべてのレイヤーのルートディレクトリーです。 -
ディレクトリー
src/main/resources/layers/standalone/mariadb-driver を
作成します。 mariadb-driver
ディレクトリーで、次の内容でlayer-spec.xml
ファイルを作成します。<?xml version="1.0" ?> <layer-spec xmlns="urn:jboss:galleon:layer-spec:1.0" name="mariadb-driver"> <feature spec="subsystem.datasources"> 1 <feature spec="subsystem.datasources.jdbc-driver"> <param name="driver-name" value="mariadb"/> <param name="jdbc-driver" value="mariadb"/> <param name="driver-xa-datasource-class-name" value="org.mariadb.jdbc.MariaDbDataSource"/> <param name="driver-module-name" value="org.mariadb.jdbc"/> </feature> </feature> <packages> 2 <package name="org.mariadb.jdbc"/> </packages> </layer-spec>
mariadb-driver
レイヤーは、JBoss Modules
モジュールによって実装された JDBC ドライバーの設定で datasources サブシステムを更新します。-
ディレクトリー
src/main/resources/layers/standalone/mariadb-datasource
を作成します。 mariadb-datasource
ディレクトリーで、次の内容でlayer-spec.xml
ファイルを作成します。<?xml version="1.0" ?> <layer-spec xmlns="urn:jboss:galleon:layer-spec:1.0" name="mariadb-datasource"> <dependencies> <layer name="mariadb-driver"/> 1 </dependencies> <feature spec="subsystem.datasources.data-source"> 2 <param name="data-source" value="MariaDBDS"/> <param name="jndi-name" value="java:jboss/datasources/${env.MARIADB_DATASOURCE:MariaDBDS}"/> <param name="connection-url" value="jdbc:mariadb://${env.MARIADB_HOST:localhost}:${env.MARIADB_PORT:3306}/${env.MARIADB_DATABASE}"/> 3 <param name="driver-name" value="mariadb"/> <param name="user-name" value="${env.MARIADB_USER}"/>4 <param name="password" value="${env.MARIADB_PASSWORD}"/> </feature> </layer-spec>
- 1
- この依存関係により、データソースがプロビジョニングされるときに MariaDB ドライバーのプロビジョニングが強制されます。レイヤーが依存するすべてのレイヤーは、そのレイヤーがプロビジョニングされるときに自動的にプロビジョニングされます。
- 2
- MariaDBDS という名前のデータソースを使用してデータソースサブシステム設定を更新します。
- 3
- データソースの名前、ホスト、ポート、およびデータベースの値は、サーバーの起動時に設定される環境変数
MARIADB_DATASOURCE
、MARIADB_HOST
、MARIADB_PORT
、およびMARIADB_DATABASE
から解決されます。 - 4
- ユーザー名とパスワードの値は、環境変数
MARIADB_USER
およびMARIADB_PASSWORD
から解決されます。
次のコマンドを実行して、Galeon 機能パックをビルドします。
mvn clean install
ファイル
target/mariadb-galleon-pack-1.0-SNAPSHOT.zip
が作成されます。
5.3.1.3. S2I ビルド中にカスタム Galleon 機能パックを使用する
カスタム機能パックは、OpenShift S2I ビルド中に発生する Maven ビルドで使用できるようにする必要があります。これは通常、カスタム機能パックをアーティファクトとして (例: org.example.mariadb:mariadb-galleon-pack:1.0-SNAPSHOT)
アクセス可能な Maven リポジトリーにデプロイすることによって実現されます。
導入前に機能パックをテストするには、ローカルで構築された Galleon 機能パックを利用できるようにする EAP S2I ビルダーイメージ機能を使用できます。次の手順例を使用して、PostgreSQL ドライバーの代わりに MariaDB ドライバーを使用して todo-backend
EAP クイックスタートをカスタマイズします。
-
todo-backend
EAP クイックスタートの詳細は、EAP クイックスタート を参照してください。 - カスタム Galleon 機能パックを使用するための JBoss EAP S2I イメージの設定の詳細は 高度な環境変数を使用した Galleon の設定 を参照してください。
前提条件
- OpenShift コマンドラインがインストールされている
- OpenShift クラスターにログインしている
- クラスターに JBoss EAP OpenShift イメージがインストールされている
-
Red Hat Container
レジストリーへのアクセスを設定しました。詳細については、Red Hat Container Registry を参照してください。 - カスタムガレオン機能パックを作成しました。詳細は、Maven プロジェクトの準備 を参照してください。
手順
次のコマンドを実行して、MariaDB データベースを開始します。
oc new-app -e MYSQL_USER=admin -e MYSQL_PASSWORD=admin -e MYSQL_DATABASE=mariadb registry.redhat.io/rhscl/mariadb-101-rhel7
OpenShift サービス
mariadb-101-rhel7
が作成され、開始されます。Maven プロジェクトディレクトリー
mariadb-galleon-pack
内で次のコマンドを実行して、カスタム機能パック Maven ビルドによって生成された機能パック ZIP アーカイブからシークレットを作成します。oc create secret generic mariadb-galleon-pack --from-file=target/mariadb-galleon-pack-1.0-SNAPSHOT.zip
秘密の
mariadb-galleon-pack
が作成されます。S2I ビルドを開始するときに、このシークレットを使用してフィーチャーパックの .zip ファイルを Pod にマウントし、サーバーのプロビジョニングフェーズでファイルを使用できるようにします。新しい OpenShift ビルドを作成して、Galleon でトリミングされたサーバー内で実行される
todo-backend
クイックスタートデプロイメントを含むアプリケーションイメージをビルドするには、次のコマンドを実行します。oc new-build jboss-eap74-openjdk11-openshift:latest~https://github.com/jboss-developer/jboss-eap-quickstarts#EAP_7.4.0.GA \ --context-dir=todo-backend \ --env=GALLEON_PROVISION_FEATURE_PACKS="org.example.mariadb:mariadb-galleon-pack:1.0-SNAPSHOT" \ 1 --env=GALLEON_PROVISION_LAYERS="jaxrs-server,mariadb-datasource" \ 2 --env=GALLEON_CUSTOM_FEATURE_PACKS_MAVEN_REPO="/tmp/repo" \ 3 --env=MAVEN_ARGS_APPEND="-Dcom.redhat.xpaas.repo.jbossorg" \ --build-secret=mariadb-galleon-pack:/tmp/repo/org/example/mariadb/mariadb-galleon-pack/1.0-SNAPSHOT \ 4 --name=todos-app-build
- 1
- 機能パックの Maven 座標のコンマ区切りリストを含むカスタム機能パック環境変数 (
groupId:artifactId:version
など)。 - 2
- サーバーのプロビジョニングに使用される Galleon レイヤーのセット。
jaxrs-server
は基本サーバー層で、mariadb-datasource
は MariaDB ドライバーと新しいデータソースをサーバーインストールにもたらすカスタム層です。 - 3
- MariaDB 機能パックを含むイメージ内のローカル Maven リポジトリーの場所。このリポジトリーは、イメージ内にシークレットをマウントするときに設定されます。
- 4
mariadb-galleon-pack
シークレットは、/tmp/repo/org/example/mariadb/mariadb-galleon-pack/1.0-SNAPSHOT
ディレクトリーにマウントされます。
作成した OpenShift ビルドから新しいビルドを開始するには、次のコマンドを実行します。
oc start-build todos-app-build
コマンドが正常に実行されると、イメージ
todos-app-build
が作成されます。新しいデプロイメントを作成するには、次のコマンドを実行して、実行中の MariaDB データベースにデータソースをバインドするために必要な環境変数を指定します。
oc new-app --name=todos-app todos-app-build \ --env=MARIADB_PORT=3306 \ --env=MARIADB_USER=admin \ --env=MARIADB_PASSWORD=admin \ --env=MARIADB_HOST=mariadb-101-rhel7 \ --env=MARIADB_DATABASE=mariadb \ --env=MARIADB_DATASOURCE=ToDos 1
- 1
- クイックスタートでは、データソースの名前が
ToDos
であることを想定しています。
注記カスタム Galleon 機能パック環境変数の詳細は、カスタム Galleon 機能パック環境変数 を参照してください。
todos-app
アプリケーションを公開するには、次のコマンドを実行します。oc expose svc/todos-app
新しいタスクを作成するには、次のコマンドを実行します。
curl -X POST http://$(oc get route todos-app --template='{{ .spec.host }}') \ -H 'Content-Type: application/json' \ -d '{"title":"todo1"}'
タスクのリストにアクセスするには、次のコマンドを実行します。
curl http://$(oc get route todos-app --template='{{ .spec.host }}')
追加されたタスクがブラウザーに表示されます。
5.3.1.4. JBoss EAP のカスタムプロビジョニングファイル
カスタムプロビジョニングファイルは、galleon
サブディレクトリーに保存されている provisioning.xml
というファイル名の XML ファイルです。
Provisioning.xml
ファイルの使用は、GALLEON_PROVISION_FEATURE_PACKS
および GALLEON_PROVISION_LAYERS
環境変数を使用する代わりに使用できます。S2I ビルド中に、provisioning.xml
ファイルを使用してカスタム EAP サーバーをプロビジョニングします。
GALLEON_PROVISION_LAYERS
環境変数を使用する場合は、カスタムプロビジョニングファイルを作成しないでください。この環境変数は、ファイルを無視するように S2I ビルドプロセスを設定するためです。
以下のコードは、カスタムプロビジョニングファイルを示しています。
<?xml version="1.0" ?> <installation xmlns="urn:jboss:galleon:provisioning:3.0"> <feature-pack location="eap-s2i@maven(org.jboss.universe:s2i-universe)">1 <default-configs inherit="false"/>2 <packages inherit="false"/>3 </feature-pack> <feature-pack location="org.example.mariadb:mariadb-galleon-pack:1.0-SNAPSHOT">4 <default-configs inherit="false"/> <packages inherit="false"/> </feature-pack> <config model="standalone" name="standalone.xml">5 <layers> <include name="jaxrs-server"/> <include name="mariadb-datasource"/> </layers> </config> <options>6 <option name="optional-packages" value="passive+"/> </options> </installation>
- 1
- この要素は、現在の eap-s2i feature-pack をプロビジョニングするようにプロビジョニングプロセスに指示します。ビルダーイメージには単一の機能パックのみが含まれていることに注意してください。
- 2
- この要素は、デフォルト設定を除外するようにプロビジョニングプロセスに指示します。
- 3
- この要素は、デフォルトパッケージを除外するようにプロビジョニングプロセスに指示します。
- 4
- この要素は、プロビジョニングプロセスに
org.example.mariadb:mariadb-galleon-pack:1.0-SNAPSHOT
フィーチャーパックをプロビジョニングするように指示します。子要素は、デフォルトの設定およびデフォルトパッケージを除外するようプロセスに指示します。 - 5
- この要素は、カスタムスタンドアロン設定を作成するようにプロビジョニングプロセスに指示します。この設定には、
jaxrs-server
基本レイヤーとorg.example.mariadb:mariadb-galleon-pack:1.0-SNAPSHOT
フィーチャーパックのmariadb-datasource
カスタムレイヤーが含まれています。 - 6
- この要素は、JBoss EAP モジュールのプロビジョニングを最適化するようプロビジョニングプロセスに指示します。
関連情報
-
GALLEON_PROVISION_LAYERS
環境変数の使用の詳細については、カスタム JBoss EAP サーバーのプロビジョニング を参照してください。
5.3.2. 高度な環境変数を使用して Galleon を設定
高度なカスタム Galleon 機能パック環境変数を使用して、S2I イメージビルドプロセス中にカスタム Galleon 機能パックとレイヤーを保存する場所をカスタマイズできます。これらの高度なカスタム Galleon 機能パック環境変数は次のとおりです。
-
GALLEON_DIR=<path>
: これは、デフォルトの<project_root_dir>/galleon
ディレクトリーパスを<project_root_dir>/<GALLEON_DIR>
に上書きします。 -
GALLEON_CUSTOM_FEATURE_PACKS_MAVEN_REPO = <path>
。これは、<project root dir>/galleon/repository
ディレクトリーパスを、Maven ローカルリポジトリーキャッシュディレクトリーへの絶対パスでオーバーライドします。このリポジトリーには、カスタム Galleon 機能パックが含まれています。
Galleon 機能パックのアーカイブファイルは、Maven ローカルキャッシュファイルシステム設定に準拠したサブディレクトリー内に配置する必要があります。たとえば、path-to-repository/org/examples/my-feature-pack/1.0.0.Final/my-feature-pack-1.0.0.Final.zip
パス内の org.examples:my-feature-pack:1.0.0.Final
機能パックを見つけます。
<project_root>/<GALLEON_DIR>
ディレクトリーに settings.xml
ファイルを作成することにより、Maven プロジェクト設定を設定できます。GALLEON_DIR
のデフォルト値は <project_root_dir>/galleon
です。Maven はこのファイルを使用して、アプリケーション用のカスタム Galleon 機能パックをプロビジョニングします。settings.xml
ファイルを作成しない場合、Maven は S2I イメージによって作成されたデフォルトの settings.xml
ファイルを使用します。
S2I ビルダーイメージはローカル Maven リポジトリーの場所を指定するため、settings.xml
ファイルでローカル Maven リポジトリーの場所を指定しないでください。S2I ビルダーイメージは、S2I ビルドプロセス中にこの場所を使用します。
関連情報
- カスタム Galleon 機能パック環境変数の詳細については、カスタム Galleon 機能パック環境変数 を参照してください。
5.3.3. カスタム Galleon feature-pack 環境変数
以下のカスタム Galleon 機能パック環境変数のいずれかを使用して、JBoss EAP S2I イメージの使用方法をカスタマイズできます。
表5.1 カスタム Galleon 機能パック環境変数の説明
環境変数 | 説明 |
---|---|
GALLEON_DIR=<path> |
ここで、<path> は、アプリケーションプロジェクトの root ディレクトリーに相対的なディレクトリーです。<path> ディレクトリーには、
デフォルトのディレクトリーは |
GALLEON_CUSTOM_FEATURE_PACKS_MAVEN_REPO=<path> |
<path> は、カスタム feature-packs を含む Maven ローカルリポジトリーディレクトリーの絶対パスです。ディレクトリーのデフォルトは |
GALLEON_PROVISION_FEATURE_PACKS=<list_of_galleon_feature_packs> | <list_of_galleon_feature_packs> は、Maven コーディネートによって識別されるカスタム Galleon feature-packs のコンマ区切りリストです。一覧表示されている feature-packs は、ビルダーイメージにある JBoss EAP 7.4 サーバーのバージョンと互換性がある必要があります。
|