3.4. OpenShift Source-to-Image (S2I) プロセスでの JWS の使用
JWS for OpenShift イメージを実行および設定するには、アプリケーションテンプレートパラメーターおよび環境変数を使用して OpenShift S2I プロセスを使用します。
JWS for OpenShift イメージの S2I プロセスは以下のようになります。
configuration/
Maven settings.xml ファイルがある場合は、新しいイメージの$HOME/.m2/
に移動します。Maven および Maven の settings.xml ファイルの詳細は、Apache Maven Project の Web サイト を参照してください。
ソースリポジトリーに pom.xml ファイルがある場合、
$MAVEN_ARGS
環境変数の内容を使用して Maven ビルドがトリガーされます。デフォルトでは、
package
のゴールはopenshift
プロファイルで使用されます。これには、テストをスキップする引数 (-DskipTests
) および Red Hat GA リポジトリーを有効にするための引数 (-Dcom.redhat.xpaas.repo.redhatga
) が含まれます。成功した Maven ビルドの結果は
/opt/webserver/webapps/
にコピーされます。これには、$ARTIFACT_DIR
環境変数によって指定されたソースディレクトリーからの WAR ファイルがすべて含まれます。$ARTIFACT_DIR
のデフォルト値はtarget/
ディレクトリーです。MAVEN_ARGS_APPEND
環境変数を使用して Maven 引数を変更します。-
deployments/
ソースディレクトリーのすべての WAR ファイルが/opt/webserver/webapps/
にコピーされます。 -
configuration/
ソースディレクトリーのすべてのファイルは、/opt/webserver/conf/
にコピーされます (Maven の settings.xml ファイルを除く)。 lib/
ソースディレクトリーのすべてのファイルは/opt/webserver/lib/
にコピーされます。注記カスタムの Tomcat 設定ファイルを使用する場合は、通常の Tomcat インストールと同じファイル名を使用する必要があります。例: context.xml および server.xml。
S2I プロセスを設定してカスタム Maven アーティファクトリーポジトリーミラー を使用する方法は、アーティファクトリーポジトリーミラー の項を参照してください。
3.4.1. 既存の Maven バイナリーを使用した OpenShift アプリケーションの JWS の作成
既存のアプリケーションは oc start-build
コマンドを使用して OpenShift にデプロイされます。
前提条件: OpenShift 用の JWS にデプロイする既存の .war
、.ear
、または .jar
アプリケーション。
ローカルファイルシステムでディレクトリー構造を準備します。
アプリケーションが必要とするコンテンツがバイナリーに含まれていないコンテンツを含むソースディレクトリーを作成します。必要に応じて、Using the JWS for OpenShift Source-to-Image(S2I) プロセス を参照してください。次に、
deployments/
サブディレクトリーを作成します。$ mkdir -p <build_dir>/deployments
バイナリー (
.war
,.ear
,.jar
) をdeployments/
にコピーします。$ cp /path/to/binary/<filenames_with_extensions> <build_dir>/deployments/
注記ソースディレクトリーの
deployments/
サブディレクトリーにあるアプリケーションアーカイブは、OpenShift 上にビルドされているイメージの$JWS_HOME/tomcat/webapps/
ディレクトリーにコピーされます。アプリケーションをデプロイするには、web アプリケーションデータが含まれるディレクトリー階層が正しく設定される必要があります (「OpenShift Source-to-Image (S2I) プロセスでの JWS の使用」 を参照)。OpenShift インスタンスにログインします。
$ oc login <url>
必要に応じて新規プロジェクトを作成します。
$ oc new-project <project-name>
oc get is -n openshift
でアプリケーションに使用する OpenShift イメージストリームの JWS を特定します。$ oc get is -n openshift | grep ^jboss-webserver | cut -f1 -d ' ' jboss-webserver50-tomcat9-openshift
注記オプション
-n openshift
は使用するプロジェクトを指定します。oc get is -n openshift
はopenshift
プロジェクトからイメージストリームリソース (is
) を取得 (get
) します。イメージストリームおよびアプリケーション名を指定して、新規ビルド設定を作成します。
$ oc new-build --binary=true \ --image-stream=jboss-webserver<version>-openjdk8-tomcat9-openshift-rhel7:latest \ --name=<my-jws-on-openshift-app>
OpenShift イメージビルドのバイナリー入力用に上記で作成されたソースディレクトリーを使用するように OpenShift に指示します。
$ oc start-build <my-jws-on-openshift-app> --from-dir=./<build_dir> --follow
イメージに基づいて新しい OpenShift アプリケーションを作成します。
$ oc new-app <my-jws-on-openshift-app>
サービスを公開して、アプリケーションがユーザーにアクセスできるようにします。
# to check the name of the service to expose $ oc get svc -o name service/<my-jws-on-openshift-app> # to expose the service $ oc expose svc/my-jws-on-openshift-app route "my-jws-on-openshift-app" exposed
公開されたルートのアドレスを取得します。
oc get routes --no-headers -o custom-columns='host:spec.host' my-jws-on-openshift-app
- ブラウザーでアプリケーションにアクセスするには http://<address_of_exposed_route> / <my-war-ear-jar-filename-without-extension> を入力します。
3.4.2. 例: 既存の Maven バイナリーを使用した OpenShift アプリケーションの JWS の作成
以下の例では、「既存の Maven バイナリーを使用した OpenShift アプリケーションの JWS の作成」 の手順を使用して tomcat-websocket-chat クイックスタートを使用します。
3.4.2.1. 要件:
WAR アプリケーションアーカイブを取得したり、アプリケーションをローカルにビルドしたりします。
ソースコードのクローンを作成します。
$ git clone https://github.com/jboss-openshift/openshift-quickstarts.git
アプリケーションをビルドします。
$ cd openshift-quickstarts/tomcat-websocket-chat/
$ mvn clean package [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Tomcat websocket example 1.2.0.Final [INFO] ------------------------------------------------------------------------ ... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 01:28 min [INFO] Finished at: 2018-01-16T15:59:16+10:00 [INFO] Final Memory: 19M/271M [INFO] ------------------------------------------------------------------------
ローカルファイルシステムでディレクトリー構造を準備します。
バイナリービルドのソースディレクトリーを、ローカルファイルシステムと
deployments/
サブディレクトリーに作成します。WAR アーカイブをdeployments/
にコピーします。[tomcat-websocket-chat]$ ls pom.xml README.md src/ target/
$ mkdir -p ocp/deployments
$ cp target/websocket-chat.war ocp/deployments/
3.4.2.2. OpenShift でサンプルアプリケーションを設定する方法
OpenShift インスタンスにログインします。
$ oc login <url>
必要に応じて新規プロジェクトを作成します。
$ oc new-project jws-bin-demo
oc get is -n openshift
でアプリケーションに使用する OpenShift イメージストリームの JWS を特定します。$ oc get is -n openshift | grep ^jboss-webserver | cut -f1 -d ' ' jboss-webserver50-tomcat9-openshift
イメージストリームおよびアプリケーション名を指定して、新規ビルド設定を作成します。
$ oc new-build --binary=true \ --image-stream=jboss-webserver<version>-openjdk8-tomcat9-openshift-rhel7:latest\ --name=jws-wsch-app --> Found image 8c3b85b (4 weeks old) in image stream "openshift/jboss-webserver<version>-tomcat9-openshift" under tag "latest" for "jboss-webserver<version>" JBoss Web Server 5.0 -------------------- Platform for building and running web applications on JBoss Web Server 5.0 - Tomcat v9 Tags: builder, java, tomcat9 * A source build using binary input will be created * The resulting image will be pushed to image stream "jws-wsch-app:latest" * A binary build was created, use 'start-build --from-dir' to trigger a new build --> Creating resources with label build=jws-wsch-app ... imagestream "jws-wsch-app" created buildconfig "jws-wsch-app" created --> Success
バイナリービルドを開始します。OpenShift イメージビルドのバイナリー入力にソースディレクトリーを使用するように OpenShift に指示します。
$ *oc start-build jws-wsch-app --from-dir=./ocp --follow* Uploading directory "ocp" as binary input for the build ... build "jws-wsch-app-1" started Receiving source from STDIN as archive ... Copying all deployments war artifacts from /home/jboss/source/deployments directory into `/opt/jws-5.4/tomcat/webapps` for later deployment... '/home/jboss/source/deployments/websocket-chat.war' -> '/opt/jws-5.4/tomcat/webapps/websocket-chat.war' Pushing image 172.30.202.111:5000/jws-bin-demo/jws-wsch-app:latest ... Pushed 0/7 layers, 7% complete Pushed 1/7 layers, 14% complete Pushed 2/7 layers, 29% complete Pushed 3/7 layers, 49% complete Pushed 4/7 layers, 62% complete Pushed 5/7 layers, 92% complete Pushed 6/7 layers, 100% complete Pushed 7/7 layers, 100% complete Push successful
イメージに基づいて新しい OpenShift アプリケーションを作成します。
$ oc new-app jws-wsch-app --> Found image e5f3a6b (About a minute old) in image stream "jws-bin-demo/jws-wsch-app" under tag "latest" for "jws-wsch-app" JBoss Web Server 5.0 -------------------- Platform for building and running web applications on JBoss Web Server 5.0 - Tomcat v9 Tags: builder, java, tomcat9 * This image will be deployed in deployment config "jws-wsch-app" * Ports 8080/tcp, 8443/tcp, 8778/tcp will be load balanced by service "jws-wsch-app" * Other containers can access this service through the hostname "jws-wsch-app" --> Creating resources ... deploymentconfig "jws-wsch-app" created service "jws-wsch-app" created --> Success Application is not exposed. You can expose services to the outside world by executing one or more of the commands below: 'oc expose svc/jws-wsch-app' Run 'oc status' to view your app.
サービスを公開して、アプリケーションがユーザーにアクセスできるようにします。
# to check the name of the service to expose $ oc get svc -o name service/jws-wsch-app # to expose the service $ oc expose svc/jws-wsch-app route "jws-wsch-app" exposed
公開されたルートのアドレスを取得します。
oc get routes --no-headers -o custom-columns='host:spec.host' jws-wsch-app
- ブラウザーでアプリケーションにアクセスします: http://<address_of_exposed_route>/websocket-chat
3.4.3. ソースコードから JWS for OpenShift アプリケーションを作成します。
ソースコードから新しい OpenShift アプリケーションを作成する詳細な手順は、OpenShift.com - ソースコードからのアプリケーションの作成 を参照してください。
次に進む前に、アプリケーションのデータが正しく構造化されていることを確認します (「OpenShift Source-to-Image (S2I) プロセスでの JWS の使用」 を参照)。
OpenShift インスタンスにログインします。
$ oc login <url>
必要に応じて新規プロジェクトを作成します。
$ oc new-project <project-name>
oc get is -n openshift
でアプリケーションに使用する OpenShift イメージストリームの JWS を特定します。$ oc get is -n openshift | grep ^jboss-webserver | cut -f1 -d ' ' jboss-webserver50-tomcat9-openshift
Red Hat JBoss Web Server for OpenShift イメージを使用して、ソースコードから新しい OpenShift アプリケーションを作成し、
--image-stream
オプションを使用します。$ oc new-app \ <source_code_location>\ --image-stream=jboss-webserver<version>-openjdk8-tomcat9-openshift-rhel7\ --name=<openshift_application_name>
例を以下に示します。
$ oc new-app \ https://github.com/jboss-openshift/openshift-quickstarts.git#master \ --image-stream=jboss-webserver<version>-openjdk8-tomcat9-openshift-rhel7\ --context-dir='tomcat-websocket-chat' \ --name=jws-wsch-app
ソースコードがイメージに追加され、ソースコードがコンパイルされます。ビルド設定とサービスも作成されます。
アプリケーションを公開するには、以下を実行します。
# to check the name of the service to expose $ oc get svc -o name service/<openshift_application_name> # to expose the service $ oc expose svc/<openshift_application_name> route "<openshift_application_name>" exposed
公開されたルートのアドレスを取得するには、以下を実行します。
oc get routes --no-headers -o custom-columns='host:spec.host' <openshift_application_name>
- ブラウザーでアプリケーションにアクセスします: http://<address_of_exposed_route>/<java_application_name>