LoginSignup
1

More than 5 years have passed since last update.

Capistranoのデプロイコマンドを簡単にするシェルスクリプト

Last updated at Posted at 2018-12-14

はじめに

この記事はLinkbal Advent Calendar 2018の14日目の記事です(投稿日が1日過ぎていることは内緒です)。

どうも、水野(キンチキ)です。今回は前回の記事と同じくシェル周りのネタです。

capistranoのデプロイコマンドが長い

capistranoでのデプロイは bundle exec cap production deploy ですよね。これならまだいいのですが、hogeブランチをstging環境にデプロイする場合だと bundle exec cap staging deploy BRANCH=hoge という長いコマンドになります。

bundle exec はaliasの作成などでいいですが、環境名とブランチ名をいちいち打つのは非常にめんどくさいです。
私は1年ほど前に諸事情で毎日様々なブランチを合計で最低10回はデプロイしているときがありました。それなのに毎回こんな長いコマンドを打つのは耐えられませんでした。
もちろん、ctrl+rによるインクリメント検索(peco使用)で毎回コマンドのすべてを打ってはいませんでしたが、それでもいちいちブランチ名を変えたりするのがとにかく面倒でした。

そして、毎日何回もデプロイする場合、馬鹿にならない時間をコマンドを入力することに取られます。

ということで、思考停止で簡単にデプロイできるcapistrano用のラッパーのシェルスクリプトを作成しました。

capistrano用のラッパーのシェルスクリプト

プロジェクトのルートディレクトリに適当な名前でファイルを作成し、以下を記載してください。
ここではファイル名を deploy.sh とします。

なお、このシェルスクリプトは私の人生初シェルスクリプトなので、イマイチな点があるかと思います。
そういう点がありましたら、コメントや編集リクエストを頂けると幸いです。

deploy.sh
#!/bin/sh

# usage用のテキスト
usage="usage: deploy.sh <target_environment> <target_branch>\n<target_branch> default is current branch\nex: deploy.sh stg develop"

# 引数の数が0 または2より多い場合エラー
if [ $# -eq 0 ] || [ $# -gt 2 ]; then
    echo $usage
    exit 1
fi

# environment が存在しないものならエラー
# devとstaging環境がある想定
# productionは怖いので外しておく
environment=$1
if [ $environment != "dev" ] && [ $environment != "stg" ] && [ $environment != "staging" ]; then
    echo "deploy.sh: $1: No such environment"
    exit 1
fi

# stg だった場合 staging に変換
[ $environment = "stg" ] && environment="staging"
# current branch name を $current_branch に入れる
current_branch=$(echo $(git symbolic-ref --short HEAD | tr -d '\n'))

# コマンド実行
# 引数が2つのときは2つ目の引数に入力したブランチをデプロイ
if [ $# -eq 2 ]; then
    bundle exec cap $environment deploy BRANCH=$2
# 引数が1つのときはカレントブランチをデプロイ
elif [ $# -eq 1 ] && [ -n $current_branch ]; then
    bundle exec cap $environment deploy BRANCH=$current_branch
fi

ファイルを作成したら以下のコマンドで実行権限を付与します。

$ chmod +x deploy.sh

あとは以下のようなコマンドでデプロイ可能です。

# staging環境にカレントブランチをデプロイ
$ ./deploy.sh stg

# dev環境にhogeブランチをデプロイ
$ ./deploy.sh dev hoge

このシェルスクリプトは、余分なものを一切入力せずに環境名とブランチ名だけ入力すればデプロイできます。
また、ブランチ名を省略すればカレントブランチをデプロイしてくるため、タイピング量が減ってとても快適です。

ただ、私は ./deploy.sh すら入力するのが面倒だったので、パスが通ったディレクトリにファイルをコピーして、ファイル名を capdep として capdep stg としていました。

・・・これを書いていて思いましたが、gitリポジトリで他の人が使っていてかつ変更されることを考えると alias capdep=./deploy.sh のようにエイリアスを作成したほうがいいですね。

おわりに

この記事のシェルスクリプトはかなり簡単なものです。
しかし、簡単なシェルスクリプトでもいろいろなことができます。

決った手順で複数のコマンドを実行したり、長いコマンドを打つことがある方は、シェルスクリプトを書いて楽にすることを検討してみるいいかもしれませんね。

それではまた。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1