[Capistrano] Gitのブランチ名を指定してアプリケーションを配備する

Capistranoを使ってStaging環境にRailsアプリケーションを配備するときに、普段はmasterブランチでいいんだけど、状況によっては特定のブランチを配備して検証したい、なんて状況ありますよね。

Capistranoの設定ファイルで、配備対象のGitのブランチ名を指定するには以下のように書けばいいのですが、これだと常に同じブランチ(例だとmasterブランチ)が配備されてしまいます。

実はCpistranoには、コマンド実行時の引数を使って、設定値を動的に変更する仕組みが用意されています。

上記のコードを、そのように修正した結果が以下のコード。fetchメソッドがミソです。

fetchメソッドはcapコマンド実行時の引数の値を参照するためのメソッド。第1引数に引数名、第2引数にはコマンド実行時に値が入力されなかった場合のデフォルト値を指定します。

この状態で、例えば以下のようにcapコマンドを呼び出すことで、masterブランチではなく、feature/hogeブランチ(正確にはorigin/feature/hogeブランチ)の内容がサーバに配備されるようになります。

以下のように、ブランチ名を指定しなかった場合は、masterブランチの内容が配備されます。

これで、Capistranoを使ってかなり柔軟なアプリケーション配備をおこえるようになりますね。

どこかの誰かのお役に立てば嬉しいな。それでは!