アプリ開発ときどきアウトドア

主にJavaを使ったアプリ開発やトラブルシューティング等のノウハウ、キャンプや登山の紹介や体験談など。

1. システムエンジニアリング eap/wildfly Linux シェルスクリプト 基盤技術

wildflyへのwarデプロイの自動化

投稿日:2019年5月5日 更新日:


更新したWebアプリをWildflyにデプロイするのが面倒なのでスクリプトを作成してみました。

前提

  • 実行環境はCentOS Linux 7です。
  • JavaEEのWebアプリの配布形式であるwarファイルをデプロイする想定です。
  • JBoss CLIを使ってWildflyにwarファイルをデプロイします。Wildflyに接続する際に認証が必要となりますが、Wildflyの既定である「ローカルホストからの接続は誰でも許可」を前提にしているため、ユーザ名やパスワードは指定していません。必要な場合は、–user, –password等のオプションを追加してください。

スクリプトの説明

  • スクリプトで指定されたwarファイルをWildflyにデプロイします。成功した場合は0、失敗した場合は1を返却します。
  • デプロイしたいディレクトリ名・ファイル名(war)をDEPLOY_DIR, DEPLOY_FILE変数に指定してください。既定ではスクリプトと同じディレクトリにwarファイルが配置される想定になっています。
  • 実行時のログはスクリプトと同じフォルダのdeploy.logに出力します。変更したい場合はLOG_DIR, LOG_FILE変数を変更してください。なお、何度も繰り返し実行するタイプのスクリプトではないので、同一のログファイルに出力する前提としています。
  • 実行に成功した場合、このスクリプトが配置されているディレクトリに、oldディレクトリを作成し、warファイルをこのディレクトリに退避(mv)します。実行に失敗した場合は、退避しません。
  • スクリプトは任意の場所に配置して実行できます。
#!/bin/sh
#
# deploy war to Wildfly
#

# common variables
BASE_DIR=$(dirname $0)
LOG_PATH=$BASE_DIR/deploy.log

# deploy file
DEPLOY_DIR=$BASE_DIR
DEPLOY_FILE=sampleapp.war
DEPLOY_PATH=$DEPLOY_DIR/$DEPLOY_FILE
BK_DIR=$BASE_DIR/old
BK_FILE=${DEPLOY_FILE}.$(date +"%Y%m%d_%H%M%S")
BK_PATH=$BK_DIR/$BK_FILE

# jboss-cli
JBOSS_CLI=/opt/wildfly/bin/jboss-cli.sh

# logging function
function log(){
    read MSG
    if [ ! -z "$MSG" ]; then
        echo [$(date +"%Y-%m-%d %H:%M:%S.%3N")] "$MSG" | tee -a "$LOG_PATH"
    fi
}

# main process

echo "start deploying" | log

# deply to wildfly via jboss_cli
"$JBOSS_CLI" -c "deploy $DEPLOY_PATH --force" 2>&1 | log
RESULT=${PIPESTATUS[0]}

# backup war file
if [ $RESULT -eq 0 -a -e "$DEPLOY_PATH" ]; then
        echo "backup to: $BK_PATH" | log
        mkdir -p $BK_DIR 2>&1 | log
        mv -f "$DEPLOY_PATH" "$BK_PATH" | log
fi

echo "end deploying(result: $RESULT)" | log
exit $RESULT
22-27行目:
リダイレクトされた内容をログファイルに出力する関数です。リダイレクトされた内容はread関数でMSG変数に格納しています。もしリダイレクトされた内容が空でなければ、ログ出力します。
34-35行目:
JBOSS CLIを使ってデプロイします。このコマンドの実行結果を取得するために、$PIPESTATUSを使っています。log関数にパイプしている関係で、直前の実行結果を取得するための”$?”では常に0になってしまうため。
38-42行目:
デプロイが正常に完了し、かつwarファイルが存在している場合は、そのファイルを退避します。

使用方法

スクリプトを任意の場所に配置し、実行権限を付与します。(例: chmod a+x ./deploy.sh等)
warファイルを配置し、deploy.shを実行します。
成功した場合は終了コード0、失敗時は1を返却します。

$ ./deploy.sh
[2019-05-05 13:57:13.075] start deploying
[2019-05-05 13:57:17.628] backup to: ./old/sampleapp.war.20190505_135713
[2019-05-05 13:57:17.657] end deploying(result: 0)
$ echo $?
0
$ ./deploy.sh
[2019-05-05 13:57:31.673] start deploying
[2019-05-05 13:57:35.119] Path /.../sampleapp.war doesn't exist.
[2019-05-05 13:57:35.185] end deploying(result: 1)
$ echo $?
1


(adsbygoogle = window.adsbygoogle || []).push({});


(adsbygoogle = window.adsbygoogle || []).push({});

-1. システムエンジニアリング, eap/wildfly, Linux, シェルスクリプト, 基盤技術

執筆者:


  1. […] リモートのLinux上のwildflyにデプロイするために、warデプロイスクリプトが配置されているものとします。配置場所は、”~someuser/deploying/deploy.sh”を前提としています。 […]

comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

postgresqlでの拡張のインストール

PostgreSQL10で暗号化関数を使用するため拡張(pgcrypto)をインストールした際の出来事を記載します。 事象 pgcryptoの拡張をインストールしたり、インストールの確認を行うと、その …

ASP.NET Core: 変更ページを実行環境に反映

ASP.Net Core(3.0)の開発で、ページ(cshtml)を編集しながらページデザインを確認したい。 既定ではページを変更しても実行環境に反映れずサーバの再起動が必要となり開発効率が悪い。 サ …

JBoss EAP7でDEBUG/TRACEログを出力

JBoss EAP7でアプリのDEBUGやTRACEのログを出力する方法を記載します。 開発の序盤でアプリのDEBUGログがeclipseのコンソールやログファイルに出力されず、困る場合があるので、メ …

Javaでのパスワード付きzipファイルの圧縮/解凍方法(ZipCrypto/AES)

先日、JavaでのZIP暗号化の考察という記事を書きましたが、zip4jのメンテナンスが再開されており、バージョン2系が公開されていましたので、これを使って通常のzip圧縮/解凍、パスワード付きzip …

slf4jとlog4j2を使たデバッグログの出力方法

Webアプリやスタンドアロンアプリの開発でデバッグログやトレースログを出したい場合があります。 とりあえず、ロガーのログレベルをdebugやtraceに下げればいいや、と設定してもログが出力されない場 …

プロフィール ゆっきーです。
都内でシステムエンジニアをやっています。
もっと詳細を見る