ブロックチェーン・AI・システム開発の株式会社INDETAIL

Gradle SSH PluginとGradle Credentials Pluginの紹介

2015.11.26
INDETAIL

Gradle大好きなmentaikoです。
みなさんはJavaでビルドしたwarやjarをどのようにしてサーバにデプロイしているでしょうか?
私は数年前にFabricを使っていたのですが、Gradle SSH Pluginでほぼ同様の処理を実現できたので導入してみました。
そこでGradle SSH Pluginを使った自動デプロイの設定を紹介したいと思います。

自動デプロイの設定例

以下のようなGradle FatJar Pluginを使ったbuild.gradleがあるとします。
これにデプロイタスクを追加してみましょう。

プラグインの設定

applybuildscript.dependenciesを追加します。

デプロイ先サーバの定義

パスワード認証(app1)、公開鍵認証(app2)、踏み台サーバ経由(app3)で3パターンを定義してみました。

デプロイタスク、アプリ起動タスク、アプリ停止タスク

デプロイタスクはsessionの引数で接続先を指定し、executeでコマンド実行、putでfatjarとstart.shをアップロードしています。

更にアプリの起動タスク、停止タスクも追加します。
アプリ起動タスクではstart.shの中でjavaをバックグラウンド実行、executenohupを指定しつつpty: trueにしないとコマンドが返ってこないので注意してください。

以上で設定完了です。おつかれさまです。
これで次のようにstopdeploystartを順に実行するとデプロイとアプリを再起動することができます。

パスワード設定を外部化

これで自動デプロイできるようになりましたが平文のパスワードを直接記述する必要があるため、本番サーバなどアクセスできる人を限定したい場面で使うことができません。
そんな時はGradle Credentials Pluginでパスワード設定を外部化することができます。

Gradle SSH Pluginと同じようにプラグインを設定します。
これだけでパスワードをローカルに保存できるaddCredentialsタスクを実行できるようになります。

次にaddCredentialsタスクでパスワードを登録します。
すると${GRADLE_HOME}/gradle.encrypted.propertiesに暗号化されて保存されます。

そしてremotes.app1.passwordを次のように変更します。

これでデプロイする人にパスワードを登録してもらえばそれ以外に人にパスワードが漏れません。

まとめ

最終的にbuild.gradleは次のようになります。

参考リンク

「いいね」ボタンを押すと、最新情報をすぐに確認できます。