Gradle: Git で管理されているアプリケーションをデプロイ


Gradle を使って、 Git で管理されているアプリケーションをデプロイするスクリプトを書きました。 Gradle でなくても良かったのですが、 偶然 Gradle でやったことがあったので、 Gradle で書きました。

前提

今回前提としたデプロイは、単純に git pull をしてコードを更新した後、 サーバを再起動するものです。 サーバから Git の リモートリポジトリへの認証は、 鍵ファイルを使って行っているものとします。

また Rails を前提としているので、 Rails 専用 の処理もあります。 他の言語でも応用できます。

応用次第で、 git で管理されているコードの中の一部をサーバにコピーすることもできます。

環境

  • Gradle 3.2.1

準備

gradle をインストールして、 gradle init を実行します。 そうすると、 gradle のテンプレートが用意されます。 そこにデプロイのタスクを書いていきます。

コード

次のようになりました。

処理説明

デプロイ部分の処理は次の通りです。 現場によって変えて使う部分です。

  1. ssh でサーバに接続します。
  2. dfコマンドで空き容量をチェックします。 ここで Y または N をタイプして、後続の処理を実行するか否か決定します。
  3. 古いコードをコピーします。
  4. git pull で新しいソースコードを取得・デプロイします。
  5. rake db:migrate を実行します。 この部分は Rails 固有 の処理です。
  6. Apache を再起動します。 このときの終了ステータスに応じて “Success” または “Failed” を表示します。

注意点

git pull のためにサーバ側に秘密鍵を登録しておく必要があります。 SSH でのエージェントフォワードもできるので、 自分の秘密鍵を使って git pull を行うこともできます。

SSH のエージェントフォワードをする場合は次の記述をリモートセッションの実行前に追加します。

sshのキーは ssh-add で登録しておきます。 これで git で使用する秘密鍵を登録しておけばその鍵を使って git pull が行われます。

GitHub

GitHub で公開しています。 gradle-deploy