更新した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)します。実行に失敗した場合は、退避しません。
- スクリプトは任意の場所に配置して実行できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | #!/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を返却します。
1 2 3 4 5 6 | $ ./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 |
1 2 3 4 5 6 | $ ./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 |