Gradle: 自動デプロイ


私が Gradle を使って Spring Boot の自動デプロイを実現した方法です。 自動というのは リポジトリのフックなどではなく、 自動テストの後のデプロイでもなく、 コマンドでデプロイする方法を指しています。

環境

  • gradle 2.10

サーバ環境・デプロイ先は Spring Boot のアプリケーションを AWS EC2 にデプロイする手順 に記載の方法と同じです。

処理内容

自動デプロイには gradle-ssh-plugin を使います。

今回実現した自動デプロイでは次の順序で処理が行われます。 コマンドは ./gradlew deployWar です。

  1. war をコンパイルする。
  2. サーバの war ファイル を更新する。
  3. tomcat を再起動する。

コンパイルを省略して、既にコンパイルされている war をデプロイする場合は ./gradlew deployWar -x war を実行します。

コード

編集したファイルは3つです。 まずは Spring Boot のアプリケーションを AWS EC2 にデプロイする手順 で作成した build.gradle を変更します。 下でハイライトしているところが変更箇所です。

JSON から設定ファイルを読み込んで、 デプロイ対象サーバを特定します。 その後、 ssh を使って順次コマンドを実行していくというシンプルな発想です。 Spring Boot のアプリケーションを AWS EC2 にデプロイする手順 では、 war のコピーを sudo -u tomcat ... というやり方でコピーしていましたが、 build.gradle ではうまくいかなかったので sudo でコピーした後 chown を実行しています。

最後に tomcat を再起動しているのは、 データベースのキャッシュをクリアするためです。

そしてもうひとつ、 サーバ設定ファイルを作成します。

この deploy_config.json.sample を作っておき、 使いたいときはこれを元に deploy_config.json を作成して使います。 秘密鍵情報などあるので git に入れるべきか悩むところです。 必要に応じて .gitignore を編集します。