RailsアプリをwerckerでCIする

# はじめに
* [wercker](http://wercker.com/)を使うとリモートリポジトリに変更がpushされた時点でビルド/デプロイが自動で走らせることができます
* 無料で利用できます
* [こちら](http://blog.mah-lab.com/2014/01/08/rails-wercker-heroku-deploy/)のサイトに詳しく書いてあります、非常に参考になりました
 * 私はさぐりさぐりで半日かかりましたが、本Qiita記事を見れば30分〜1時間程で体験は出来ると思います

# 事前準備
* [wercker](http://wercker.com/)のアカウント登録をgithubアカウントで登録してください
* [github](https://github.com/)と[heroku](https://dashboard.heroku.com/)のアカウントを持っていなければそちらも

# 必要な作業
* githubにRailsアプリをあげておく
* werckerでCIするアプリケーションを登録
* Herokuアプリの作成
* werckerでデプロイの設定
* wercker.ymlを編集
* いざ、git push


## githubにRailsアプリをあげておく
* 私は以下のリポジトリをForkして楽させていただきました
 * https://github.com/mahm/rails-wercker-heroku
* [こちら](http://blog.mah-lab.com/2014/01/08/rails-wercker-heroku-deploy/)の「Railsアプリを用意する」節の通りに作ってもできます

## werckerでCIするアプリケーションを登録
* 登録したアカウントでログインする
* [「Add an application」](https://app.wercker.com/#applications/create)をクリックしてCIするアプリを追加する
 * 「1. Choose a Git provider」でUse GitHubをクリック
 * 「2. Select a repository」対象のアプリを選択して「Use selected repo」をクリック
 * 「3. Add werckerbot」でwerckerbotを追加するように言われます(スキップ可能)
 * 「4. Setup your wercker.yml」でymlを設定するようにいわれますが、先ほどのリポジトリをForkすれば何も文句はいわれません(スキップ可能)
 * 「Let's finish up」で「Create application」をクリック

## Herokuアプリの作成
* Herokuにログインする
* 「[Apps](https://dashboard.heroku.com/apps)」をクリックする
* 「Create a new app」をクリックし、アプリを作成する
 * 任意の名前をしていしなければ自動で適当な名前で作られます
 * 私の場合、fierce-chamber-1303という名前が割り当てられました

## デプロイの設定
* 「Settings」▶︎「Add deploy target」▶︎「Heroku」 
* Herokuにログインする
* [Herokuのアカウント設定](https://dashboard.heroku.com/account)にある「API Key」をコピペして「Connect」をクリック
* 「Deploy target name」に任意の名前をつける(ex. production)
* 「Auto deploy」にチェックをいれ、branch nameにmasterといれる
* 「Heroku app name」に先ほどで作ったHerokuのアプリ名を選択して「Save」をクリック


## wercker.ymlを編集
* 基本的に[こちら](http://blog.mah-lab.com/2014/01/08/rails-wercker-heroku-deploy/)に書いてあるまま使いました
* 私の試した環境ではうまく動かなくて1カ所だけ編集しました
* $APP_NAMEとしてますが直書きでも可です
 * 環境変数を使う場合は、werckerの「Settings」▶︎「Pipeline」▶︎「Add new variable」から追加してください

```yaml
deploy:
    steps:
        - heroku-deploy
        - script:
            name: Update database
#           code: heroku run rake db:migrate --app $APP_NAME
            code: heroku run:detached rake db:migrate --app $APP_NAME

```

## いざ、git push
* リモートリポジトリに変更がpushされたことをフックして、ビルドとデプロイが開始されることを確認しました

## その他
* 私の環境では以下が出来ていなかったのでやっておきました
 * .ssh/configの設定
 * .git/configの設定
 * Heroku周りの設定 
* お使いの環境によって細かな違いがあると思うので参考までに

### .ssh/configの設定

```
Host github.com
  User git 
  Hostname ssh.github.com
  Port 443 
  IdentityFile ~/.ssh/id_rsa

Host heroku.com
  User git 
  Hostname heroku.com
  Port 22
  IdentityFile ~/.ssh/id_rsa
  IdentitiesOnly yes 
  TCPKeepAlive yes 
```

### .git/configの設定

```
[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = ssh://git@github.com/RustyNail/rails-wercker-heroku.git
[branch "master"]
        remote = origin
        merge = refs/heads/master
[remote "heroku"]
        url = git@heroku.com:fierce-chamber-1303.git
        fetch = +refs/heads/*:refs/remotes/heroku/*
```

## Heroku周りの設定 
* public keyの登録

```
$ heroku keys:add
$ heroku login # loginできることを確認
# 以下のようになればOK
Enter your Heroku credentials.
Email: xxxxx@example.com
Password (typing will be hidden): 
Authentication successful.
```

# 制限
* 1つのビルドが25分以内に完了することという制限があります
* １つのリポジトリに対して一つのCIしか登録できない
* クレジットカード契約はしない

# 参考にしたサイト
* http://blog.mah-lab.com/2014/01/08/rails-wercker-heroku-deploy/
* http://yahsan2.blogspot.jp/2012/06/pc-heroku-ssh-key.html
* http://opamp.hatenablog.jp/entry/20110914/1316011399
* http://cynipe.hateblo.jp/entry/2014/01/06/224751

# ～ただの宣伝～
* [全国のSeleniumer必読](http://qiita.com/oh_rusty_nail/items/b8ba525d31ea7c522856)
* Seleniumerといっていますが、Selenium, SauceLabs, Travis, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください