Travis CI からHerokuへのデプロイを自動化してみた
2013.09.07 追記: keys:clear -> keys:remove に修正
Travis CI でテストを自動化したなら、デプロイも自動化したい。
という訳で、自動化してみた。
参考にしたページ
Deploying to Heroku with Travis CI | Neil Middleton http://www.neilmiddleton.com/deploying-to-heroku-from-travis-ci/
設定方法
まず、HerokuのAPI KEYを環境変数に登録する必要があります。
環境変数の設定
$ heroku auth:token <your_heroku_key> $ gem install travis $ travis encrypt --add HEROKU_API_KEY=<your_heroku_key>
このコマンドで env.global.secure の所が追加されます。
.travis.ymlの設定
language: ruby rvm: - 2.0.0 branches: only: - master - develop - feature/travis bundler_args: --without development --path vendor/bundle script: "bundle exec rake db:migrate spec" notifications: email: false env: global: secure: |- WmjPp2Xk3Btg2YB4DaaDSCkkdMdEpThGJVi6Dc4M+W7K2gwHOD7/o4zw/5TD fSryEVPfDaXGmzrAOkI4zhsTz/EWp52CLHT/djLcn2d2azuhw6dy0w6lFYMK m9CwWnjP8ErDXG5TCd2omPXLEJVUCPpPUu7O7CLfnQro1X8OF8c= after_success: - script/deploy.sh
個人的にbranchesにfeature/travisを入れておくとdevelopにpushしなくても.travis.ymlの設定が確認できるのでオススメ。
デプロイのスクリプトの例
#!/bin/sh if [ "$TRAVIS_PULL_REQUEST" != "false" ] then echo "This is a pull request. No deployment will be done." exit 0 fi if [ "$TRAVIS_BRANCH" = "master" ] then wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh git remote add heroku git@heroku.com:nullpohub.git echo "Host heroku.com" >> ~/.ssh/config echo " StrictHostKeyChecking no" >> ~/.ssh/config echo " CheckHostIP no" >> ~/.ssh/config echo " UserKnownHostsFile=/dev/null" >> ~/.ssh/config yes | heroku keys:add yes | git push heroku master heroku run rake db:migrate heroku restart heroku keys:remove `whoami`@`hostname` fi
私はdevelopブランチをherokuで動作確認するために
git push heroku develop:master
としています。
あと、毎回 heroku keys:clear をしているため、この自動デプロイが動き始めると自分のローカルPCからデプロイしようとするとエラーになるので、そこだけ注意。