JavaのWebアプリケーション開発フレームワークによる、Webサイト開発の顛末記です。

EclipseのMavenを使った、Spring-MVC、Thymeleaf、MyBatis 等のプログラミングテクニックを、
備忘録的に記録しています。実際に動くソースコードを多用して説明していますので、
これからEclipseや、Spring-MVCを始めたいと思っている人にとって、少しでも参考になれば幸いです。
■Spring Boot の小径 第5歩 Spring Boot ホットデプロイ
5-4)ホットデプロイ実施
それではいよいよ、gradleを使ったホットデプロイのための、build.gradleの編集です。
おおまかな作業手順としては、
1)共有リポジトリからの最新反映(git pull)
 プログラムの修正は、原則としてEclipseで行って、Linux側で git pull & build & deployを行います。
2)ビルド実施
 git pull した最新をビルドします。(warの生成)
3)デプロイイメージの生成
 一時ディレクトリに、warを展開してデプロイ構成を作成します。
4)デプロイ実施
 作成したデプロイ構成を、Tomcat環境にデプロイします。
5)Tomcatリロード
 Tomcat環境のアプリケーションをリロードして公開します。
build.gradleの実物です。
正直言って、Gradleに関してはまだ初心者のため
これがベストなやり方かどうかは自信がありませんが、とりあえず問題なく
期待した結果が得られるので良しとしましょう。
ソース中にコメントを入れてあるので読んでもらえれば理解できると思いますが、
簡単に手順を解説しておきます。

まず、前半部分(dependencies{}ブロックまで)は、すでに説明済みなので省略します。
一点だけ、AntのReloadTasksを使用するので、dependencies{}ブロックに、
catalinaAnt "org.apache.tomcat:tomcat-catalina-ant:8.0.39"
を追加しています。

タスクで使用する共通プロパティをいくつか定義します。
このプロジェクトの固有のプロパティは、別途 gradle.properties にまとめて定義します。

1.pull() ← cleanup()タスク:
  作業ディレクトリを掃除後、共有リポジトリから最新をpullします。
2.deploy() ← copycontents() ← unzip() ←workdir() ← build()タスク:
  gradle標準のbuild()タスクを実施しwarファイルを作成します。
  一時作業用ディレクトリを作成します。
  作成したwarファイルを一時作業用ディレクトリに展開し、
  warに含まれない静的コンテンツを一時作業用ディレクトリにコピーした後
  一時作業用ディレクトリ配下を、Tomcat環境にデプロイします。
3.reload()タスク:
  Antの機能である、ReloadTaskをgradleから実施します。

理想的には、2.のbuild()タスクを、pull()タスクに依存させてdeploy()タスクで
一気にpullからdeployまでをやりたかったのですが
gradle標準の、build()タスクに依存関係を持たせるやり方が分からなかったので、
gradleだけでは解決できず、最終的にLinuxのシェルスクリプトを使って実現しました。

$ vi build.sh
 #!/bin/sh
 gradle -q pull deploy
 ~~~~~~~~~~~~~

これで、 $sh build.sh を実行すれば、pullからdeployまで一気に実施されます。
reload()タスクに、deploy()タスクを依存させれば、アプリケーションのリロードまでも
一気に実施可能ですが、ここではreload()は必要に応じて実施するようにしています。
gradle.properties
アプリケーション固有のプロパティと、tomcat操作のプロパティをこのファイルにまとめてあります。

AntのReloadTaskを使うためには、tomcatの設定ファイルの調整が必要です。
${TOMCAT_HOME}/conf/tomcat-users.xml に、
<role rolename="manager-script"/>
<user username="user" password="password" roles="manager-script"/>
を追加してください。tomcatを再起動すれば設定が有効になります。
やっとのことで、最終目的のSpring Boot ホットデプロイまで到着できました。

最後になりましたが、参考・引用させていただいたサイトです。
Gradle User Guide
ゲンゾウ用ポストイット