LoginSignup
4
3

More than 5 years have passed since last update.

Railsアプリのherokuへのデプロイをシェルスクリプト(bash)で自動化する

Last updated at Posted at 2016-07-18

動機

herokuへのデプロイは、gitを利用します。

git push heroku master

これは開発者の手に馴染んだツールで、開発者がアプリケーションコードを開発する自然な流れの中でデプロイ操作を可能にすることが重要だと考えているからです。

今日、CIツールとの連携でリポジトリにpushすると、単体テストパスし、デプロイが走るようにすることも可能ですが、今回は
1. 最新をローカルへpull
2. heroku環境へpush
3. rake db:migrate
ができればよいので、シェルスクリプトの範囲で解決できそうです。
また、私はステージング環境、本番環境を持っているので引数で指定してそれぞれの環境へデプロイするものを作りました。

仕様

  • シェルスクリプトはRailsのアプリケーションルートに'deploy.sh' というファイル名で配置する
  • 引数でstaging, productionという文字列を渡してそれぞれのデプロイを行うようにする
  • ステージング環境のリポジトリ名は 'staging'にする。developブランチをデプロイする
  • 本番環境のリポジトリ名は'production'にする。masterブランチをデプロイする
  • herokuのアプリケーション名はここでは便宜的に testapp-staging, testapp-production
  • かならずデプロイ後にマイグレーションを実行する
  • デプロイ終わったら、git checkout - で直前のブランチに戻る

ソース


#!/bin/bash 

# 前提 staging環境のリモートリポイジトリ名 -> staging
# 前提 production環境のリモートリポイジトリ名 -> production


env=$1

if [ $env = "staging" ]; then
  echo "deploy to staging"
  git checkout develop
  git pull origin develop
  git push $env develop:master
  heroku run rake db:migrate --app testapp-staging 
  git checkout -
fi

if [ $env = "production" ]; then
  echo "deploy to production"
  git checkout master
  git pull origin master
  git push $env master
  heroku run rake db:migrate --app testapp-production 
  git checkout -
fi


実行

bash deploy.sh staging
bash deploy.sh prodution
4
3
0

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
4
3