読者です 読者をやめる 読者になる 読者になる

ほとラボ

It works!

デプロイツールを使う程でもないときの git pull するだけのデプロイスクリプト

Capistrano設定するのダルいな〜〜〜」

「でもわざわざ全サーバにログインして git pull するのもな〜〜〜」

というときに使えるシェルスクリプトです。

#!/bin/sh

TARGET='staging' # デプロイ先
APPDIR='~/app'   # アプリのあるディレクトリ
BRANCH='master'  # デプロイするブランチ

while getopts :bdt: OPT
do
  case $OPT in
    'b' ) BRANCH="$OPTARG" ;;
    'd' ) APPDIR="$OPTARG" ;;
    't' ) TARGET="$OPTARG" ;;
      * ) echo "Usage: `basename $0` [-t TARGET] [-d APPDIR] [-b BRANCH]" 1>&2
          exit 1 ;;
  esac
done

# デプロイするホストの設定
case $TARGET in
  'staging' ) HOSTS=( app-stg-web-1 app-stg-web-2 ) ;;
  'release' ) HOSTS=( app-web-1 app-web-2 app-web-3 ) ;;
          * ) echo "Undefined target '${TARGET}'." 1>&2
              exit 1 ;;
esac

# デプロイできるかどうかチェック
for HOST in ${HOSTS[@]}; do
  REMOTE_BRANCH=`ssh ${HOST} "cd ${APPDIR} && git rev-parse --abbrev-ref HEAD"`

  # カレントブランチとデプロイしたいブランチが違っていたらエラー
  if [ $BRANCH != $REMOTE_BRANCH ]; then
    echo "Oops, ${HOST} branch is ${REMOTE_BRANCH}." 1>&2
    exit 1
  fi
done

# 各サーバにデプロイ
for HOST in ${HOSTS[@]}; do
  ssh $HOST "cd ${APPDIR} && git pull"
done