28 AntタスクおよびMavenプラグインを使用したアプリケーションのデプロイ
注意:
また、SDKまたはサポート対象のIDEを使用してアプリケーションを個別にデプロイすることもできます。「JCS - SaaS Extension Controlを使用したアプリケーションの個別デプロイ」を参照してください。ユーザー・アプリケーションの検証
Oracle Java Cloud Service - SaaS Extensionインスタンスでインストールまたは更新されるアプリケーションはすべて、最初にホワイトリスト・ツールによって検証されます。
ホワイトリスト検証
ホワイトリスト・ツールにより、Java API検証の一環として、デプロイメント・ディスクリプタおよび他のアプリケーション構成ファイル(log4j.properties
ファイルなど)が検証されます。
アプリケーションをOracle Cloudにデプロイすると、Oracle Java Cloud Service - SaaS Extensionによってホワイトリスト違反がないかどうかが確認されます。Java API違反がある場合は、アプリケーションのデプロイが拒否されない可能性があります。代わりに、警告レポートが作成されます。たとえアプリケーションの実行時に許可されていない使用方法が実行されたとしても、セキュリティ例外が発生するのはランタイム中のみです。たとえば、サード・パーティ・ライブラリでホワイトリスト検証時に警告が発生するのはよくあることですが、これらがランタイム中に実行されることはめったにありません。
デプロイメントを試行する前に、Oracle Java Cloud Service - SaaS Extension SDKに用意されているwhitelist.jar
を使用してアプリケーションをローカルで検証できます。
使用方法
オプション
$>java -jar whitelist.jar
java -jar whitelist.jar [-argument ...] [-help] [file1 file2 dir1 dir2 ...]
このツールを使用して、許可されていない使用方法が可能かどうかについて1つ以上のクラス・ファイル、JARファイル、デプロイ可能なアーカイブ(WARまたはEAR)、または展開済ディレクトリをスキャンできます。また、入力ファイルをデプロイ可能なアーカイブ内にパッケージ化できるかどうかを検証することもできます(入力ファイルがクラス、JAR、WARまたはEARでない場合)。次に例を示します。
java -jar whitelist.jar -log /home/log/newlog.log /home/apps/myapp.war java -jar whitelist.jar myapp.jar
オプション | 説明 |
---|---|
log |
スキャン結果が書き込まれるログ・ファイルへのパス。 ショートカット: l |
grid |
グリッド内にエラーをリストするかどうかを示すフラグ(true/false)。グリッドの折返しを回避するには、コンソール・ウィンドウの幅が十分であることを確認するか、gridwidthオプションを使用してグリッドの幅を制限します。 ショートカット: g デフォルト値: false |
gridwidth |
グリッドの最大幅。グリッド表示の幅を制限する場合(たとえば、表示範囲が狭い場合)、これを使用できます。 注意: より狭い幅を指定する場合、グリッドがその幅に収まるよう形成されない可能性があります。これは、gridがtrue である場合に当てはまります。ショートカット: gw デフォルト値: 180 |
例28-1 ホワイトリストの例
$java -jar whitelist.jar localremote-ejb.jar -grid
#===========================================================================# | Whitelist validation - localremote-ejb.jar | #===========================================================================# | Entry | Validation Error(s) - 3 | |=============================|=============================================| |com/prohorenko/localremote/ |Type javax.ejb.EJBObject not | |ExRem.class(2) |allowed.(OnClassSignature:com.prohorenko.| | |localremote.ExRem ->Base type) | | |Type java.rmi.RemoteException not allowed.| | |(Exceptions at method:sayHello -> | | |OnClassSignature:java.rmi.RemoteException) | |-----------------------------+---------------------------------------------| |com/prohorenko/localremote |Type java.rmi.RemoteException not allowed.| |/ExRemHome.class(1) |(Exceptions at method:create-> | | |OnClassSignature:java.rmi.RemoteException) | +-----------------------------+---------------------------------------------+ ERROR - Whitelist validation has failed with 3 error(s).
Antタスクを使用したデプロイ
Apache Ant (Ant)には、JCS - SaaS Extensionアプリケーション用として自動化されたデプロイメント・オプションが用意されています。
Antタスク
Antタスクは、デプロイメントに関連するすべてのSDK CLIコマンドで使用可能です。
AntタスクおよびCLIコマンド
各Antタスクは、対応するCLIコマンドで使用可能なすべての引数をサポートしています。
次のコード例は、(SDKに含まれる)oracle.javacloud.antlib.xml
構成ファイルに定義されているAntタスクを参照する方法を示しています。
注意:
SDK_HOME
は、SDKのホーム・ディレクトリ(: /Users/javacloud-user/Desktop/work/sdk/oracle-javacloud-sdk
など)を指し示しています。<project name="sample-how-to-use-ant" default="all" basedir="." xmlns:javacloud="antlib:oracle.javacloud.antlib"> <!-- When you execute the build file, make sure that the Ant properties are available to the build.(For example: pass -DSDK_HOME=/Users/javacloud-user/Desktop/work/sdk/oracle-javacloud-sdk) ..--> <property environment="env"/> <property name="SDK_HOME" value="${env.SDK_HOME}"/> <path id="javacloud.classpath"> <pathelement location="${SDK_HOME}/lib/ant-javacloud.jar"/> </path> <taskdef uri="antlib:oracle.javacloud.antlib" resource="oracle/javacloud/antlib.xml" classpathref="javacloud.classpath"> <!-- The local.classpath definition is required only when working against a local WebLogic domain.It can be completely ignored if the build file is aimed to be run only against Oracle Cloud.Note: WEBLOGIC.JAR points to ${WL_HOME}/server/lib/weblogic.jar --> <path id="local.classpath"> <pathelement path="${SDK_HOME}/lib/localextension.jar"/> <!-- optional for running whitelist validation automatically while installing --> <pathelement path="${SDK_HOME}/lib/whitelist.jar"/> <pathelement path="${WEBLOGIC.JAR}"/> </path> </project>
次の表は、対応するCLIコマンドにマップされたすべての定義済Antタスクの参照リストです。
タスク | 対応するCLIコマンド | 追加のAnt属性(これらのプロパティはMavenのサポート対象) |
---|---|---|
|
|
failonerror、password、truststorepassword、jobidproperty |
|
|
failonerror、password、truststorepassword、jobidproperty |
|
|
failonerror、password、truststorepassword、jobidproperty |
|
|
failonerror、password、truststorepassword、jobidproperty |
|
|
failonerror、password、truststorepassword、jobidproperty |
|
|
failonerror、password、truststorepassword、waitfor、jobstatusproperty、lastlogproperty、timeoutsecs、pollintervalmillis、downloadlastlogonfailure、downloadlastlogpath |
|
|
failonerror、password、truststorepassword |
|
|
failonerror、password、truststorepassword、lastlogproperty |
|
|
failonerror、password、truststorepassword |
|
|
failonerror、password、truststorepassword、applicationnamesproperty |
|
|
failonerror、password、truststorepassword、applicationexistproperty、applicationstatusproperty、applicationurlproperty |
|
|
failonerror、password、truststorepassword、jobidproperty |
|
|
failonerror、password、truststorepassword、jobidproperty |
|
|
failonerror、password、truststorepassword、jobidproperty |
|
|
failonerror、password、truststorepassword、librarynamesproperty |
|
|
failonerror、password、truststorepassword |
|
|
failonerror、password、truststorepassword、serviceinstancestatusproperty、serviceinstancesizeproperty、dbserviceinstanceproperty |
|
|
failonerror、password、truststorepassword |
|
|
failonerror、password、truststorepassword |
|
|
failonerror、password、truststorepassword |
|
|
failonerror、password、truststorepassword |
|
|
failonerror、password、truststorepassword |
Ant構築タスクは、Ant構築プロセスをより詳細に制御できる追加属性を選択的にサポートしています。
属性 | 説明 | デフォルト値 | 出力属性 |
---|---|---|---|
|
タスクが失敗したときにAnt構築を失敗にする必要があるかどうかを示すフラグ( |
|
|
|
ユーザーのパスワード。 |
||
|
トラストストアのパスワード。 |
|
|
|
タスクが成功したときにジョブIDとともに設定されるAntプロパティ名を採用する出力属性。この値は、有効なAntプロパティ名である必要があります。たとえば、タスクが実行された後に |
X |
|
|
ジョブIDとともに設定されるAntプロパティ名を採用する出力属性。この値は、有効なAntプロパティ名である必要があります。たとえば、タスクが成功した後に |
X |
|
|
現在のジョブに関連付けられた最後のログ・ファイルの名前とともに設定されるAntプロパティ名を採用する出力属性。この値は、有効なAntプロパティ名である必要があります。たとえば、タスクが成功した後に |
X |
|
|
ジョブが失敗したときに最後のログ・ファイルを自動的にダウンロードする必要があるかどうかを示すブール値( |
|
|
|
失敗したログのコンテンツをダウンロードするファイルへのパス。属性 |
最後のログの名前 + ".log" |
|
|
アプリケーションが存在するときに |
X |
|
|
アプリケーションのステータスとともに設定される出力属性。これが設定されるのは、アプリケーションが存在する場合のみです。 |
X |
|
|
アプリケーションURLとともに設定される出力属性。これが設定されるのは、アプリケーションが存在し、アプリケーションがアクティブなステージにある場合のみです。 注意: アプリケーションに複数のWebモジュールがある場合、複数のアプリケーションURLがあります。このような場合、設定されるプロパティのカンマ区切りのリストを渡すことができます。Webモジュールの数より多くのプロパティが渡された場合、これらのプロパティは無視されます。特定のプロパティが、アプリケーション内のWebモジュールと同じ順序でURLとともに設定されます。これより少ないプロパティが渡された場合、これらのみが設定されます。 |
X |
|
|
ジョブが完了するまで、または |
false |
|
|
タスクが返されるまでに待機する必要がある最大時間を示すタイムアウト間隔(秒単位)。正の数でない場合、タスクはジョブが完了するまで無限に待機する必要があることを示します。 |
600 (10分) |
|
|
ジョブが完了したかどうかを確認するポーリング間隔(ミリ秒単位)。 |
30000 (30秒) |
|
|
このサービス・インスタンスに関連付けられたデータベース・サービス名とともに設定される出力プロパティ。これより多いデータベース・アソシエーションがある場合、プロパティ名のカンマ区切りのリストを指定できます。 |
X |
|
|
サービス・インスタンスの(オファリングの)サイズとともに設定される出力プロパティ。 |
X |
|
|
サービス・インスタンスのステータスとともに設定される出力プロパティ。 |
X |
|
|
アプリケーション名のカンマ区切りのリストとともに設定される出力プロパティ。 |
X |
|
|
ライブラリのカンマ区切りのリストとともに設定される出力プロパティ。各ライブラリのフォーマットは |
X |
クラスパスを指定するためのネストされた<classpath/>要素
属性classpath
をサポートするタスクは、クラスパスを手軽に指定するためのネストされた<classpath/>
をサポートしています。
注意:
タスクは、対応するコマンドが-classpath
を引数としてサポートしている場合、classpath
属性をサポートします。アクティブ・ジョブを処理するためのネストされた<onresourcebusy/>
-
<javacloud:install/>
-
<javacloud:update/>
-
<javacloud:start/>
-
<javacloud:stop/>
-
<javacloud:delete/>
-
<javacloud:install-library/>
-
<javacloud:update-library/>
-
<javacloud:delete-library/>
-
<javacloud:restart-service-instance/>
<onresourcebusy/>
を使用して、アクティブなジョブを処理できます。デフォルトでは、ジョブがすでに実行されている場合、前にリストしたタスクは待機します。アクティブなジョブがすでに存在するときに、包含するタスクが失敗するようにするには、retrycount="0"
に設定します。注意:
アクティブなジョブがタイムアウトした場合、包含するタスクは再試行せずに失敗します。属性 | 説明 | デフォルト値 | 出力タイプ |
---|---|---|---|
|
包含するタスクが再試行する回数。アクティブなジョブが完了または失敗すると、 注意: 再試行中、アクティブなジョブが新しく再度生成される可能性があります。この属性は、包含するタスクを再試行する必要がある回数を示します。再試行しない場合は、 |
3 |
|
|
アクティブなジョブが完了または失敗するまでにタスクが待機する必要がある最大時間を示すタイムアウト間隔(秒単位)。正の数でない場合、タスクはジョブが完了するまで無限に待機する必要があることを示します。 |
600 (10分) |
|
|
アクティブなジョブが完了したかどうかを確認するポーリング間隔(ミリ秒単位)。 |
30000 (30秒) |
<javacloud:update debug="true" local="${LOCAL}" failonerror="true" adminurl="${ADMIN_URL}" user="${USER}"password="${PASSWORD}" identitydomain="${IDENTITY_DOMAIN}" serviceinstance="${SERVICE_INSTANCE}" application="${APP_NAME}" path="${PATH}" jobidproperty="jobid" adminstate="true"> <classpath refid="local.classpath"/> <onresourcebusy retrycount="0"/> </javacloud:update>
local="true"を使用する際の重要な注意事項
1つの構築ファイルを作成し、このファイルをローカルのOracle WebLogic Serverドメインに対して使用することも、リモートのOracle Java Cloud Service - SaaS Extensionインスタンスに対して使用することもできます。ただし、ローカルのOracle WebLogic Serverドメインに対して実行できる構築ファイルを作成する場合は注意してください。たとえば、<javacloud-install/>
を実行してジョブIDを取得してから、<javacloud-status/>
を実行する場合、同じAntクラスローダーを使用して両方のタスクが起動されるように構築ファイルを作成する必要があります。お薦めのアプローチは、次のとおりです。
<target name="deploy"> <javacloud:install local="${LOCAL}" failonerror="true" adminurl="${ADMIN_URL}" user="${USER}" password="${PASSWORD}" identitydomain="${IDENTITY_DOMAIN}" serviceinstance="${SERVICE_INSTANCE}" application="${APP_NAME}" path="${PATH}" jobidproperty="jobid"> <classpath refid="local.classpath"/> </javacloud:install> <echo message="Install job id:${jobid}"> <javacloud:job-status waitfor="true" local="${LOCAL}" failonerror="true" adminurl="${ADMIN_URL}" user="${USER}" password="${PASSWORD}" jobid="${jobid}"> <classpath refid="local.classpath"/> </javacloud:job-status> </target>
注意:
<antcall/>
を使用してジョブ・ステータスを確認するすることはお薦めしません。Antの例
次の例は、コマンドのAntジョブを実行する方法のガイドラインを示します。参照および分類用として、対応するCLIコマンドが含まれています。
アプリケーションのインストール
CLIコマンド:
$ java -jar javacloud.jar install -user user -serviceinstance wls -identitydomain myiddomain -path oracle-javacloud-sdk/samples/apps/visitors.war -application visitor password: ******
Antタスク:
$ant -DSDK_HOME=sdk/oracle-javacloud-sdk/ -DADMIN_URL=https://javaservices.us.cloud.oracle.com -DUSER=user -DPASSWORD=pwd -DIDENTITY_DOMAIN=domain -DSERVICE_INSTANCE=serviceinstance <project name="sample-how-to-use-ant" default="all" basedir="." xmlns:javacloud="antlib:oracle.javacloud.antlib"> ...<path id="javacloud.classpath"> <pathelement location="${SDK_HOME}/lib/ant-javacloud.jar"/> </path> <taskdef uri="antlib:oracle.javacloud.antlib" resource="oracle/javacloud/ antlib.xml" classpathref="javacloud.classpath"> <path id="local.classpath"> <pathelement path="${SDK_HOME}/lib/localextension.jar"/> <pathelement path="${SDK_HOME}/lib/whitelist.jar"/> <pathelement path="${WEBLOGIC.JAR}"/> </path> <target name="deploy"> <install local="${LOCAL}" failonerror="true" adminurl="${ADMIN_URL}" user="${USER}" password="${PASSWORD}" identitydomain="${IDENTITY_DOMAIN}" serviceinstance="${SERVICE_INSTANCE}" application="${APP_NAME}" path="${PATH}" jobidproperty="jobid"> <classpath refid="local.classpath"/> </install> <echo message="Install job id:${jobid}"> <job-status downloadlastlogonfailure="true" identitydomain="${IDENTITY_DOMAIN}" waitfor="true" local="${LOCAL}" failonerror="true" adminurl="${ADMIN_URL}" user="${USER}" password="${PASSWORD}" jobid="${jobid}"> <classpath refid="local.classpath"/> </job-status> </target> </project>
Maven:
$mvn com.oracle.cloud:javacloud:install -DSDK_HOME=sdk/oracle-javacloud-sdk -Didentitydomain=iddomain -Dserviceinstance=wls -Duser=user -Dpassword=pwd -Dapplication=aap -Dpath=<path to application>
Ant - アプリケーションが存在する場合のみの削除試行
Antタスクは、Antタスクが返されるときに設定される出力プロパティをサポートしています。アプリケーションがインストールされているかどうかを確認できます。
<project name="sample-how-to-use-ant" default="all" basedir="." xmlns:javacloud="antlib:oracle.javacloud.antlib"> ...<path id="javacloud.classpath"> <pathelement location="${SDK_HOME}/lib/ant-javacloud.jar"/> </path> <taskdef uri="antlib:oracle.javacloud.antlib" resource="oracle/javacloud/ antlib.xml" classpathref="javacloud.classpath"> <path id="local.classpath"> <pathelement path="${SDK_HOME}/lib/localextension.jar"/> <pathelement path="${WEBLOGIC.JAR}"/> </path> <target name="checkappifexists"> <javacloud:describe-application debug="true" local="${LOCAL}" grid="true" failonerror="false" gridwidth="120" adminurl="${ADMIN_URL}" user="${USER}" password="${PASSWORD}" identitydomain="${IDENTITY_DOMAIN}" serviceinstance="${SERVICE_INSTANCE}" application="${APP_NAME}" applicationexistproperty="exists"> <classpath refid="local.classpath"/> </javacloud:describe-application> </target> <target name="undeployifexists" if="exists"> <javacloud:remove local="${LOCAL}" failonerror="true" adminurl="${ADMIN_URL}" user="${USER}" password="${PASSWORD}" identitydomain="${IDENTITY_DOMAIN}" serviceinstance="${SERVICE_INSTANCE}" application="${APP_NAME}" jobidproperty="jobid"> <classpath refid="local.classpath"/> </javacloud:remove> <echo message="Remove job id:${jobid}"> <javacloud:job-status downloadlastlogonfailure="true" identitydomain="${IDENTITY_DOMAIN}" waitfor="true" local="${LOCAL}" failonerror="true" adminurl="${ADMIN_URL}" user="${USER}" password="${PASSWORD}" jobid="${jobid}" lastlogproperty="lastlog"> <classpath refid="local.classpath"/> </javacloud:jobs-tatus> <javacloud:job-log-file identitydomain="${IDENTITY_DOMAIN}" local="${LOCAL}" failonerror="true" output="${OUTPUT_LOG_FILE}" adminurl="${ADMIN_URL}" user="${USER}" password="${PASSWORD}" jobid="${jobid}" log="${lastlog}"> <classpath refid="local.classpath"/> </javacloud:job-log-file> </target> <target name="all" depends="init, checkappifexists, undeployifexists .../> </project>
Ant - Oracle Java Cloud Serviceインスタンスに関連付けられたデータ・ソース名の読取り
Antタスクは、Oracle Java Cloud Serviceインスタンスに関連付けられたデータ・ソース名を読み取ることができます。これにより、アプリケーションの構築時にデータ・ソース名をアプリケーション内で使用できるようになります。データ・ソース名は、Antを使用して読み取ります。
<project name="sample-how-to-use-ant" default="all" basedir="." xmlns:javacloud="antlib:oracle.javacloud.antlib"> ...<path id="javacloud.classpath"> <pathelement location="${SDK_HOME}/lib/ant-javacloud.jar"/> </path> <taskdef uri="antlib:oracle.javacloud.antlib" resource="oracle/javacloud/ antlib.xml" classpathref="javacloud.classpath"> <path id="local.classpath"> <pathelement path="${SDK_HOME}/lib/localextension.jar"/> <pathelement path="${WEBLOGIC.JAR}"/> </path> <target name="read-db-datasource" depends="initall"> <javacloud:describe-service-instance serviceinstance="${service-instance}" debug="${debug}" gridwidth="120" local="${local}" grid="true" adminurl="${deploy-url}" user="${deploy-user}" password="${deploy-password}" failonerror="true" dbserviceinstanceproperty="dbservicename" serviceinstancesizeproperty="servicesize" identitydomain="${identity-domain}" serviceinstancestatusproperty="servicestatus"> <classpath refid="local.classpath"/> </javacloud:describe-service-instance> <echo message="Properties populated into ANT: servicestatus:${servicestatus}, servicesize:${servicesize}, dbservicename:${dbservicename}"> </target> </project>
Mavenプラグインを使用したデプロイ
Mavenプラグインは、ほとんどのCLIコマンドで使用可能です。各コマンドは、Mavenゴールとして公開されます。
MavenプラグインのJAR
プラグインJava Archive (JAR)であるmaven-javacloud.jar
は、SDKにバンドルされています。各Mavenゴールは、対応するすべてのCLIコマンド引数をプロパティとしてサポートしています。これらのプロパティ以外にも、このゴールは、対応するすべてのAntタスクの追加属性もサポートしています。
failonerror
プロパティはデフォルトでfalse
に設定されていることに注意してください。このプロパティは、値true (-Dfailonerror=true
)とともに渡すことも、ゴールが失敗したときにMaven構築が失敗するようにする場合はpom.xml
ファイルに入れることもできます。
注意:
ゴールにはプロジェクトが必要ありません。たとえば、install goal
コマンドをコマンド・ラインで直接実行することにより、Antによって生成されたWARをデプロイできます。Mavenプラグインのインストール
Mavenプラグインをインストールするには、SDKを抽出し、抽出したファイルが含まれるディレクトリを指し示すSDK_HOME
環境変数を設定します。次に例を示します。
export SDK_HOME=/Users/javacloud-user/Desktop/work/sdk/oracle-javacloud-sdk mvn install:install-file -Dfile=$SDK_HOME/lib/maven-javacloud.jar -DpomFile=$SDK_HOME/doc/resources/javacloud.pom
前のステップでは、次のプロジェクト詳細を使用してプラグインをローカル・リポジトリにインストールしています。
<project> <groupId>com.oracle.cloud</groupId> <artifactId>javacloud</artifactId> <version>1.0</version> </project>
MavenプロジェクトなしでのCLIとしてのMavenの使用
任意のディレクトリからコマンドを実行できます。次のコマンドは、最新のジョブをすべてリストします。
mvn -DSDK_HOME=$SDK_HOME -Duser=user -Dpassword=pwd -Didentitydomain=id -Dserviceinstance=si -Dgrid=true com.oracle.cloud:javacloud:list-jobs
デプロイメントに関連するMavenゴールおよび対応するCLIコマンドを次の表にまとめます。
ゴール | 対応するCLIコマンド | 説明 |
---|---|---|
|
|
すでにバンドルされており、ローカル・ディスク内で使用可能なユーザー・アプリケーションをインストールします。 |
|
|
インストール済アプリケーションを永続的に削除します。 |
|
|
既存のインストール済アプリケーションアプリケーションを更新します。 |
|
|
ジョブIDによって識別されるジョブについて説明します。説明には、ジョブの現在のステータス、開始時間および終了時間が含まれます。 |
|
|
ユーザーに表示されるジョブの詳細をすべてリストします。 |
|
|
ジョブに関連付けられたログをすべてリストします。 |
|
|
ログ・ファイルをダウンロードし、ローカル・ディスクに書き込みます。 |
|
|
インストールされており、サービス・インスタンス内で使用可能なアプリケーションをすべてリストします。 |
|
|
名前によって識別されるアプリケーションについて説明します。説明には、アプリケーションにアクセスするために使用できる現在のステータスおよびアプリケーションURL (Webモジュールごとに1つ)が含まれます。 |
|
|
特定の検索基準と一致するアプリケーション・ログ・レコードを取得します。 |
|
|
すべてのコマンドをリストします。引数 |