Corredor

ウェブ、プログラミングの勉強メモ。

WebLogic Server に WAR ファイルをデプロイする Ant スクリプト

久々に Ant ネタ。

Eclipse 上で開発しているプロジェクトを WAR ファイルに固めて、WebLogic Server にデプロイする作業を自動化してみる。

以前の記事でも話したが、現場のプログラムは Eclipse の緩いコンパイラに依存しまくっており、javac が上手くいかなかったので、Eclipse のビルド機能を利用してコンパイルし、WAR ファイルをビルドするようにした。

neos21.hatenablog.com

今回はこの Ant スクリプトでビルドした WAR ファイルを WebLogic にデプロイするまでを Ant スクリプト化した。

Gist で公開

早速だがコードは以下の3ファイル。

Eclipse 上でプロジェクトを WAR ファイルにビルドして WebLogic Server にデプロイする Ant スクリプト

ファイルの解説と使い方

この build.xmldeploy.batdeploy.xml の3ファイルを、ビルド・デプロイを行いたいプロジェクト直下に配置しておく。

build.xml は、上述の記事で紹介した WAR ファイルビルドを行う Ant スクリプトEclipse 上から起動すること。これでワークスペース直下、指定のプロジェクトフォルダと同じ階層に WAR ファイルをビルドして配置する。デプロイ処理については、exec 要素から deploy.bat を実行して行う。

deploy.bat は、deploy.xml を動作させるために呼び出す必要があるバッチスクリプトファイル。WebLogic のインストール先フォルダにある setWLSEnv.cmd を読み込み、WebLogic を操作するのに必要な環境変数を設定させ、それから deploy.xml を Ant 実行する。

deploy.xml は、WebLogic サーバの停止・起動・再デプロイなどを行う Ant スクリプト<taskdef name="wls"WebLogic を操作するタスクを定義している。このファイルの詳しい説明は後述。

deploy.batdeploy.xmlEclipse 上から叩かないと動かないものではなく、単体でバッチファイルを叩いて呼び出しても使える作りになっている。Eclipse 上で、build.xml を介して呼べば、deploy.batPause コマンドは無視され、全ての処理が続けて行われる。

deploy.xml について

WebLogic へのデプロイを行う Ant スクリプト」といきなり紹介したが、コードは「ローカル開発環境の WebLogic を操作する」作りになっている。必要な設定事項は全て property 要素で定義するようにしたので読んでもらえば分かると思うが、必要な設定をすれば別マシンの WebLogic を操作することもできるので、少し解説しておく。

  • まず、ローカル開発環境の WebLogic を操作するのであれば、WebLogic を起動した状態で Ant スクリプトを呼ぶこと。この Ant スクリプトは単純に WebLogic 管理コンソールで行う操作を Ant で記述しただけなので、WebLogic が起動していない状態では動作させられない。目安としては http://localhost:7001/console/ といった URL で管理コンソールにアクセスできる状態になっていれば良い。
  • 対象のサーバやアプリケーションは Windows サービス化されていても問題ないが、「初めてデプロイする」アプリケーションは動作しないので注意。<wls action="redeploy" というタスクは、名称のとおり ReDeploy (再デプロイ) のタスクなので、初回デプロイは別途行っておく。
  • 呼び出すタスクの順番は Main ターゲットのとおりだが、サーバを止めて、WAR ファイルを upload フォルダにコピーして、リデプロイして、サーバを起動させる、この順番を守れれば良い。どれかのタスクでコケたらちゃんとエラーになるので問題ないかと。
  • <property name="uploadPath" value="C:/Oracle/Middleware/Oracle_Home/user_projects/domains/base_domain/servers/AdminServer/upload/${warName}.war"/>
    このプロパティはデプロイ時に WAR ファイルをコピーする upload フォルダを指定しておく。CopyWar ターゲットで copy タスクを使っているとおり、単純に WAR ファイルをコピーできれば良い。
    つまり別マシンの WebLogic を操作したい場合は、upload フォルダを共有フォルダに設定しておき、//192.0.2.0/upload/${warName}.war といった形でアクセスできるようにしておけば良い。
  • <property name="adminUrl" value="t3://localhost:7001"/>
    これはデプロイ先のホストを指定する。http://localhost:7001/console/ といった URL で WebLogic 管理コンソールにアクセスできると思うが、このホストをt3:// という WebLogic 用のプロトコルで指定する。
    別マシンの WebLogic 管理コンソールも http://192.0.2.0:7001/console/ といった URL でアクセスできるのであれば、t3://192.0.2.0:7001/console/ といった形で指定できる。
  • <property name="userName" value="Neo"/>
    <property name="password" value="SomethingPassword"/>
    ここは WebLogic 管理コンソールにログインできるユーザ名とパスワードを指定しておく。パスワードが平文で扱われるので本番環境と繋げたい場合はファイルの扱いに注意したい。
  • <property name="target" value="AdminServer"/>
    これはデプロイするアプリケーションをデプロイするマシン名を指定する。何もサーバマシンを設定していなければ AdminServer しかないと思うので AdminServer としておいたが、サーバマシンがあればその名称に変更する。
  • <property name="aplName" value="${warName}"/>
    これはデプロイするアプリケーションの名前を指定している。この例はアプリケーション名が WAR ファイル名と同じ名前である作りにしている。

環境変数を読み込むために deploy.bat が分離しちゃってるのが扱いづらいかもなぁ。