無料でwerckerでRSpecのCI & Capistrano Deploy


プライベートなプロジェクトでもRSpecをデプロイのたびに実行したくて、『wercker』を使い始めましてた。
個人的には、Bitbucketのプライベートリポジトリを使って、RSpecで継続的インテグレーションしつつ、CapistranoでDeployできる
一連のプロセスが無料でスピーディに実現できるのでプライベートプロジェクトにめっちゃオススメです!


🐰 競合サービスとの比較

無料で使いはじめることができるCIツールには、『Circle CI』や
Magnum CI』などがありますが、日本語の情報が多く、Bitbucketのプライベートリポジトリが使える点を
考えて、『wercker』を選択しました。

🍮 前提: アプリケーションの環境について

今回は以下のアプリケーション構成を対象としています。

- アプリ構成
  - Ruby 2.2.0
  - Rails 4.2.0
  - RSpec 3.1.0

- デプロイ先のサーバ構成
  - CentOS
  - RVM

- リモートリポジトリ
  - Bitbucket

🍣 weckerでユーザーを作成 & アプリケーション登録

(1) GitHubかBitbucketにリポジトリを作ってアプリケーションのコードをプッシュ

(2)『wercker』でユーザー登録

(3) werckerで、GitHubかBitbucketのアカウントと連携

(4) werckerにアプリケーションのリポジトリを登録

(5) GitHub or Bitbucket側で『werckerbot』ユーザーをコラボレーターに追加

ユーザー登録のフローに関しては、『Githubのプライベートリポジトリでも無料で使えるCI、Werckerを使ってrails newからHerokuのデプロイまでやってみる
がわかりやすくてオススメっす!

🐞 wercker.ymlの設定

werckerでは、RailsプロジェクトのRootパスにwercker.ymlを作成すると
そのステップに沿って、スクリプトを実行できます。

ちなみに僕は上記の『アプリケーション構成』でRSpecとCapistranoでデプロイするスクリプトはこんな感じです。

box: wercker/rvm
services:
- wercker/postgresql
build:
steps:
- rvm-use:
version: 2.2.0
# A step that executes `bundle install` command
- bundle-install:
jobs: 4
# A step that prepares the database.yml using the database in services
- rails-database-yml:
service: postgresql
# A custom script step, name value is used in the UI
# and the code value contains the command that get executed
- script:
name: echo ruby information
code: |
echo "ruby version $(ruby --version) running"
echo "from location $(which ruby)"
echo -p "gem list: $(gem list)"
# Add more steps here:
- script:
name: rspec
code: bundle exec rspec --color -f d
deploy:
steps:
- rvm-use:
version: 2.2.0
- bundle-install:
jobs: 4
- script:
name: make .ssh directory
code: mkdir -p "$HOME/.ssh"
- create-file:
name: write ssh key
filename: $HOME/.ssh/id_rsa
overwrite: true
hide-from-log: true
content: $WERCKER_SSH_KEY_PRIVATE # 独自鍵設定の場合は、$DEPLOY_KEY
- script:
name: set permissions for ssh key
code: chmod 0400 $HOME/.ssh/id_rsa
- cap:
stage: $WERCKER_DEPLOYTARGET_NAME
tasks: deploy

🐠 環境変数の設定

(1) デプロイ用のブランチ名とターゲット名を設定

wercker => アプリケーション => Settings => Deploy Target
にDeploy Targetで「production」を作成し、branch名「マスタ」を
設定してください。

(2) サーバの認証鍵の設定

こちらは任意の設定ですが、オススメの鍵情報の設定は、『wercker => アプリケーション => Settings => SSH Keys』
からwerckerデプロイ専用の鍵を作って設定する方法です。

もし何らかの事情で独自の鍵情報を使いたい場合には、『wercker => アプリケーション => Settings => PIPLINE』
に独自の環境変数DEPLOY_KEY(例)を作って、秘密鍵を登録しています。

😼 werckerでRSpecを実行

あとはいつもとおり、Gitにソースコードをプッシュすると、自動的にwerckerでCIが実行されます。

CIが成功すると、werckerからDEPLOYボタンが押せるようになるので、それを実行するとCapistranoのタスクを実行してくれます。

🐹 参考リンク

Githubのプライベートリポジトリでも無料で使えるCI、Werckerを使ってrails newからHerokuのデプロイまでやってみる | mah365

wercker + Capistrano で自動デプロイ - milk1000cc’s blog

Werckerの仕組み,独自のboxとstepのつくりかた | SOTA

Werckerのデプロイボタンはなんだかんだ言って便利だった / マスタカの ChangeLog メモ

📚 おすすめの書籍