wsadminによるサイレントデプロイ

管理コンソールからの脱却

WebSphereへのEARのデプロイは
管理コンソールからGUI経由で行うのが簡単ですが、
何度も同じ作業をやってるとわずらわしくなります。

いつかシェルをポンっと叩いてデプロイされたら
どれだけ楽になるんだろうって考えてました。

サイレントデプロイの理想郷

もっと先に進んで考えていくと到着地点は、

 jenkinsで
  コンパイル
  テスト
  WAR・EARの生成
  WebSphereへEAR転送
  WebSphereにアプリをデプロイ

までしてもらいたい。
というところになっちゃいます。

・・・ですが。
その前に準備が必要になりますので、
まずはサイレントデプロイができるように
準備だけでもしておきたいと思います。

コマンド支援でコマンドを収集

管理コンソールでオペレーションしていると
右に「最後のアクションの管理スクリプトを表示」が
表示されていると思います。

これをクリックすると実行したコマンドが現れます。
jython形式の管理スクリプト・コマンドです。
このコマンドを収集してください。
(※下の画像は一部都合が悪いところを消しています)


集めたコマンドをpy形式で保存

以下のように収集したコマンドをpy形式のファイルで保存します。
コマンドの詳細についてはインフォメーションセンターに掲載されてます。

 ・AdminAppのコマンド一覧
  http://pic.dhe.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/exp/ae/rxml_adminapp.html
 ・AdminCongigのコマンド一覧
  http://pic.dhe.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/exp/ae/rxml_adminconfig1.html
 ・AdminControlのコマンド一覧
  http://pic.dhe.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/exp/ae/rxml_admincontrol.html

# インストール済みのアプリケーションをアンインストール
AdminApp.uninstall('<<アプリケーション名>>')
# 保管
AdminConfig.save()
# 一覧表示(いらないかも?)
AdminApp.list()
# インストール
AdminApp.install(\
    '/home/ear/<<アプリケーション名>>.ear', \
    '[ -nopreCompileJSPs -distributeApp -nouseMetaDataFromBinary -nodeployejb -appname <<アプリケーション名>> -createMBeansForResources -noreloadEnabled -nodeployws -validateinstall warn -noprocessEmbeddedConfig -filepermission .*\.dll=755#.*\.so=755#.*\.a=755#.*\.sl=755 -noallowDispatchRemoteInclude -noallowServiceRemoteInclude -MapResRefToEJB [[ "Xxxxx Web Application" "" <<アプリケーション名>>.war,WEB-INF/web.xml jdbc/sample1 javax.sql.DataSource jdbc/sample1 "" "" ][ "Xxxxx Web Application" "" <<アプリケーション名>>.war,WEB-INF/web.xml jdbc/sample2 javax.sql.DataSource jdbc/sample2 "" "" ]] -MapWebModToVH [[ "Xxxxxt Web Application" <<アプリケーション名>>.war,WEB-INF/web.xml default_host ]]]' ) 
# 保管
AdminConfig.save()
# 一覧表示(いらないかも?)
AdminApp.list()
# アプリケーションの起動
AdminControl.invoke(\
    'WebSphere:name=ApplicationManager,process=server1,platform=dynamicproxy,node=<<cell名>>,version=6.1.0.19,type=ApplicationManager,mbeanIdentifier=ApplicationManager,cell=<<cell名>>,spec=1.0', \
    'startApplication', \
    '[<<アプリケーション名>>]', \
    '[java.lang.String]') 
AdminApp.list()

wsadminで実行

上記のpyファイルをwsadminで実行します

./wsadmin.sh -lang jython -f AppInstMadoST.py

実行結果はこんな感じ

WASX7209I: ノード <<ノード名>> のプロセス "server1" に、SOAP コネクターを使って接続しました。プロセスのタイプは UnManagedProcess です。
ADMA5017I: <<アプリケーション名>> のアンインストールが開始されました。
ADMA5104I: WebSphere:cell=<<ノード名>>Cell,node=<<ノード名>> のサーバー索引エントリーは正常に更新されました。
ADMA5102I: <<アプリケーション名>> の構成データが構成リポジトリーから正常に削除されました。
ADMA5011I: アプリケーション <<アプリケーション名>> の一時ディレクトリーのクリーンアップが完了しました。
ADMA5106I: アプリケーション <<アプリケーション名>> は正常にアンインストールされました。
ADMA0080W: 許可が何も設定されていないテンプレート・ポリシー・ファイルが、1.2.x エンタープライズ・アプリケーションに含まれています。 エンタープライズ・アプリケーションの Java 2 セキュリティー・ポリシーを変更するには、アプリケーションがインストールされた後、${user.install.root}/config/cells/(yourCellName)/applications/(yourAppName).ear/deployments/(yourAppName)/META-INF ディレクトリーにある was.policy を編集します。 
WASX7327I: was.policy ファイルの内容:
//
// Template policy file for enterprise application.
// Extra permissions can be added if required by the enterprise application.
//
// NOTE: Syntax errors in the policy files will cause the enterprise application FAIL to start.
//       Extreme care should be taken when editing these policy files. It is advised to use
//       the policytool provided by the JDK for editing the policy files
//       (WAS_HOME/java/jre/bin/policytool). 
//

grant codeBase "file:${application}" {
};

grant codeBase "file:${jars}" {
};

grant codeBase "file:${connectorComponent}" {
};

grant codeBase "file:${webComponent}" {
};

grant codeBase "file:${ejbComponent}" {
};


ADMA5016I: <<アプリケーション名>> のインストールが開始されました。
ADMA5067I: アプリケーション <<アプリケーション名>> のリソース検証は正常に完了しました。
ADMA5058I: アプリケーションとモジュールのバージョンが、デプロイメント・ターゲットのバージョンに対して検証されます。
ADMA5005I: アプリケーション <<アプリケーション名>> が WebSphere Application Server リポジトリーに構成されます。
ADMA5053I: インストール済みオプション・パッケージのライブラリー参照が作成されます。
ADMA5005I: アプリケーション <<アプリケーション名>> が WebSphere Application Server リポジトリーに構成されます。
ADMA5001I: アプリケーション・バイナリーは /usr/IBM/WebSphere/AppSrv01/profiles/AppSrv01/wstemp/Script13e5ec1ec12/workspace/cells/<<ノード名>>Cell/applications/<<アプリケーション名>>.ear/<<アプリケーション名>>.ear に保管されます。
ADMA5005I: アプリケーション <<アプリケーション名>> が WebSphere Application Server リポジトリーに構成されます。
SECJ0400I: アプリケーション <<アプリケーション名>> が appContextIDForSecurity 情報で正常に更新されました。
ADMA5011I: アプリケーション <<アプリケーション名>> の一時ディレクトリーのクリーンアップが完了しました。
ADMA5013I: アプリケーション <<アプリケーション名>> は正常にインストールされました。

まとめ

思っていたよりサイレントデプロイは簡単でしたヽ(´ー`)ノ
「最後のアクションの管理スクリプトを表示」が
後押ししてくれるので非常に心強いです。

これで指定フォルダに最新のEARファイルを置いて
シェルを実行するだけでデプロイが完了します。
今までの作業って一体…°゜(゜´Д`゜)゜°