9.13. S2I
イメージには S2I スクリプトと Maven が含まれます。
現在 Maven は、OpenShift 上の JBoss EAP ベースのコンテナー (または関連/ 子孫イメージ) にデプロイされるはずのアプリケーションのビルドツールとしてのみサポートされます。
現在、WAR デプロイメントのみがサポートされます。
9.13.1. カスタム設定
イメージのカスタム設定ファイルを追加することが可能です。configuration/
ディレクトリーに置かれたすべてのファイルは EAP_HOME/standalone/configuration/
にコピーされます。たとえば、イメージで使用されるデフォルトの設定をオーバーライドするには、カスタムの standalone-openshift.xml
を configuration/
ディレクトリーに追加します。このようなデプロイメントの 例を参照 してください。
9.13.1.1. カスタムモジュール
カスタムモジュールを追加することが可能です。modules/
ディレクトリーからのすべてのファイルは EAP_HOME/modules/
にコピーされます。このようなデプロイメントの 例を参照 してください。
9.13.2. デプロイメントアーティファクト
デフォルトでは、ソースの target
ディレクトリーからのアーティファクトがデプロイされます。異なるディレクトリーからデプロイするには、BuildConfig 定義の ARTIFACT_DIR
環境変数を設定します。ARTIFACT_DIR
はコンマ区切りのリストです。例: ARTIFACT_DIR=app1/target,app2/target,app3/target
9.13.3. アーティファクトリーポジトリーミラー
Maven のリポジトリーは、すべてのプロジェクト JAR、ライブラリー JAR、プラグイン、またはその他のプロジェクト固有のアーティファクトなど、さまざまな種類のビルドアーティファクトおよび依存関係を保持します。また、S2I ビルドの実行中にアーティファクトのダウンロード元となる場所も指定します。組織では、中央リポジトリーを使用する他に、ローカルカスタムミラーリポジトリーをデプロイすることが一般的です。
ミラーを使用する利点は次のとおりです。
- 地理的に近く、高速な同期ミラーを使用できる。
- リポジトリーの内容をより良く制御できる。
- パブリックサーバーおよびリポジトリーに依存することなく、異なるチーム (開発者、CI) 全体でアーティファクトを共有できる。
- ビルド時間が改善されました。
多くの場合で、リポジトリーマネージャーはミラーへのローカルキャッシュとして機能できます。リポジトリーマネージャーがすでにデプロイされ、https://10.0.0.1:8443/repository/internal/
で外部アクセス可能な場合、以下のように MAVEN_MIRROR_URL
環境変数をアプリケーションのビルド設定に提供すると S2I ビルドはこのマネージャーを使用することができます。
MAVEN_MIRROR_URL
変数を適用するビルド設定の名前を特定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get bc -o name buildconfig/eap
oc get bc -o name buildconfig/eap
eap
のビルド設定をMAVEN_MIRROR_URL
環境変数で更新します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc env bc/eap MAVEN_MIRROR_URL="https://10.0.0.1:8443/repository/internal/" buildconfig "eap" updated
oc env bc/eap MAVEN_MIRROR_URL="https://10.0.0.1:8443/repository/internal/" buildconfig "eap" updated
設定を確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc env bc/eap --list # buildconfigs eap MAVEN_MIRROR_URL=https://10.0.0.1:8443/repository/internal/
oc env bc/eap --list # buildconfigs eap MAVEN_MIRROR_URL=https://10.0.0.1:8443/repository/internal/
- アプリケーションの新しいビルドをスケジュールします。
アプリケーションのビルド中、Maven 依存関係はデフォルトのパブリックリポジトリーではなく、リポジトリーマネージャーからプルされることを確認できます。またビルドの完了後、ビルド中に取得および使用されたすべての依存関係がミラーに追加されたことが確認できます。
9.13.3.1. セキュアなアーティファクトリーポジトリーミラー URL
Maven リポジトリーを使用した "man-in-the-middle" 攻撃を回避するために、JBoss EAP ではアーティファクトリーポジトリーのミラー URL にセキュアな URL を使用する必要があります。
URL は、安全な http ("https") とセキュアなポートを指定する必要があります。
デフォルトでは、セキュアでない URL を指定すると、エラーが返されます。この動作は、-Dinsecure.repositories=WARN
プロパティーを使用して上書きできます。
9.13.4. スクリプト
run
-
このスクリプトは、
standalone-openshift.xml
設定で JBoss EAP を設定および開始するopenshift-launch.sh
スクリプトを使用します。 assemble
-
このスクリプトは Maven を使用してソースをビルドして、パッケージ (WAR) を作成し、それを
EAP_HOME/standalone/deployments
ディレクトリーに移動します。
9.13.5. カスタムスクリプト
JBoss EAP を起動する前に、Pod の起動時に実行するカスタムスクリプトを追加できます。
Pod を起動する際に実行するのに有効なスクリプトを追加できます。これには CLI スクリプトが含まれます。
JBoss EAP をイメージから起動するときにスクリプトを含めるには、以下の 2 つのオプションを利用できます。
- postconfigure.sh として実行される configmap をマウントします。
- 指定したインストールディレクトリーに install.sh スクリプトを追加します。
9.13.5.1. カスタムスクリプトを実行するための configmap のマウント
ランタイム時にカスタムスクリプトを既存のイメージ (つまり、すでにビルドされたイメージ) にマウントする際に configmap をマウントします。
configmap をマウントするには、以下を実行します。
postconfigure.sh に追加する内容で configmap を作成します。
たとえば、プロジェクトの root ディレクトリーに
extensions
というディレクトリーを作成して、スクリプトpostconfigure.sh
とextensions.cli
を含め、次のコマンドを実行します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc create configmap jboss-cli --from-file=postconfigure.sh=extensions/postconfigure.sh --from-file=extensions.cli=extensions/extensions.cli
$ oc create configmap jboss-cli --from-file=postconfigure.sh=extensions/postconfigure.sh --from-file=extensions.cli=extensions/extensions.cli
configmap をデプロイメントコントローラー (dc) 経由で Pod にマウントします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc set volume dc/eap-app --add --name=jboss-cli -m /opt/eap/extensions -t configmap --configmap-name=jboss-cli --default-mode='0755' --overwrite
$ oc set volume dc/eap-app --add --name=jboss-cli -m /opt/eap/extensions -t configmap --configmap-name=jboss-cli --default-mode='0755' --overwrite
postconfigure.sh
の例
#!/usr/bin/env bash set -x echo "Executing postconfigure.sh" $JBOSS_HOME/bin/jboss-cli.sh --file=$JBOSS_HOME/extensions/extensions.cli
#!/usr/bin/env bash
set -x
echo "Executing postconfigure.sh"
$JBOSS_HOME/bin/jboss-cli.sh --file=$JBOSS_HOME/extensions/extensions.cli
extensions.cli
の例
embed-server --std-out=echo --server-config=standalone-openshift.xml :whoami quit
embed-server --std-out=echo --server-config=standalone-openshift.xml
:whoami
quit
9.13.5.2. install.sh を使用したカスタムスクリプトの実行
ビルド時にイメージの一部としてスクリプトを含める場合は、install.sh を使用しします。
install.sh を使用してカスタムスクリプトを実行するには、以下を実行します。
-
s2i ビルド中に使用されるプロジェクトの git リポジトリーで、
.s2i
というディレクトリーを作成します。 s2i
ディレクトリー内に、以下の内容を含む環境ファイルを追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat .s2i/environment CUSTOM_INSTALL_DIRECTORIES=extensions
$ cat .s2i/environment CUSTOM_INSTALL_DIRECTORIES=extensions
-
extensions
というディレクトリーを作成します。 extensions
ディレクトリーで、以下のように内容で postconfigure.sh ファイルを作成します (プレースホルダーコードを環境に適したコードに置き換えます)。Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat extensions/postconfigure.sh #!/usr/bin/env bash echo "Executing patch.cli" $JBOSS_HOME/bin/jboss-cli.sh --file=$JBOSS_HOME/extensions/some-cli-example.cli
$ cat extensions/postconfigure.sh #!/usr/bin/env bash echo "Executing patch.cli" $JBOSS_HOME/bin/jboss-cli.sh --file=$JBOSS_HOME/extensions/some-cli-example.cli
extensions ディレクトリーで、以下のような内容の install.sh というファイルを作成します (プレースホルダーコードを環境に適したコードに置き換えます)。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat extensions/install.sh #!/usr/bin/env bash set -x echo "Running $PWD/install.sh" injected_dir=$1 copy any needed files into the target build. cp -rf ${injected_dir} $JBOSS_HOME/extensions
$ cat extensions/install.sh #!/usr/bin/env bash set -x echo "Running $PWD/install.sh" injected_dir=$1 # copy any needed files into the target build. cp -rf ${injected_dir} $JBOSS_HOME/extensions
9.13.6. 環境変数
s2i build
コマンドに指定する環境変数によって、ビルドの実行方法が異なります。指定できる環境変数は次のとおりです。
変数名 | 説明 |
---|---|
ARTIFACT_DIR |
このディレクトリーからの
値の例: |
ENABLE_GENERATE_DEFAULT_DATASOURCE |
(オプション)値が |
GALLEON_PROVISION_DEFAULT_FAT_SERVER |
(オプション) |
GALLEON_PROVISION_LAYERS | (オプション)S2I プロセスに対し、指定されたレイヤーをプロビジョニングするよう指示します。この値は、プロビジョニングするレイヤーのコンマ区切りの一覧です。これには、ベースレイヤーと任意の数のデコレーターレイヤーが含まれます。
値の例: |
HTTP_PROXY_HOST | Maven が使用する HTTP プロキシーのホスト名または IP アドレス。
値の例: |
HTTP_PROXY_PORT | Maven が使用する HTTP プロキシーの TCP ポート。
値の例: |
HTTP_PROXY_USERNAME |
値の例: |
HTTP_PROXY_PASSWORD |
値の例: |
HTTP_PROXY_NONPROXYHOSTS | 指定された場合、設定された HTTP プロキシーはこれらのホストを無視します。
値の例: |
MAVEN_ARGS | ビルド中に Maven に指定された引数をオーバーライドします。
値の例: |
MAVEN_ARGS_APPEND | ビルド中に Maven に指定されたユーザー引数を追加します。
値の例: |
MAVEN_MIRROR_URL | 設定する Maven ミラー/ リポジトリーマネージャーの URL。
値の例: 指定した URL はセキュアである必要があることに注意してください。詳細は 「セキュアなアーティファクトリーポジトリーミラー URL」 を参照してください。 |
MAVEN_CLEAR_REPO | 任意で、ビルド後にローカル Maven リポジトリーを消去します。 イメージに存在するサーバーがローカルキャッシュと強く結合されている場合には、キャッシュが削除されず、警告が表示されます。
値の例: |
APP_DATADIR | 定義された場合、データファイルのコピー元であるソースのディレクトリー。
値の例: |
DATA_DIR |
値の例: |
詳細は、JBoss EAP for OpenShift イメージに含まれる Maven および S2I スクリプトを使用する、JBoss EAP for OpenShift イメージでの Java アプリケーションのビルドおよび実行 を参照してください。