Wercker
はCIツールのひとつで、BitBucket
やGitHub
のリポジトリをターゲットにビルドや自動テスト/デプロイを実行することが出来るツールです。特にβ期間だからというのもあるのでしょうが、Github
のプライベートリポジトリをターゲットにしても無料で利用できるというのは大きな魅力で人気があります。
このポストでは、Werckerをローカルで実行するためのツール、Wercker CLI
について解説したいと思います。
OverView
Wercker
はCIのホスティングサービスです。あらかじめWercker
のサイト上でGitHub
のレポジトリを登録しておき、そのレポジトリ上にstep(一つ一つのビルド上の手続き)やpipeline(stepや後処理の集合)を定義したwercker.yml
というYAMLファイルに配備します。そしてその対象のリポジトリ上でGitHub
のPull Request
が発行されると、それを自動検知してWercker
のサイト上でビルドが走るという仕組みになっています。
WerckerCLI
を使うとWercker上で実行されるビルドをlocal環境で実行することができます。
インストール
Wercker
は基本的には Docker
ベースのCIツールなので、WerckerCLIをインストールするためにはローカルにDockerをインストールする必要があります。
Docker
をインストールした後、ローカルでDockerを実行する環境を仮想環境上に登録する必要があるので、以下のコマンドを実行します。
> docker-machine create --driver virtualbox dev
更に、以下のコマンドを実行します。
> eval "$(docker-machine env dev)"
こちらのコマンドはターミナルを起動する毎に実行する必要があるので、起動時に必ず実行されるなにがしか的なファイルに記述しておくことをお勧めします。
Wercker CLI
自体は、brewで簡単にインストールすることが出来ます。
> brew tap wercker/wercker
> brew install wercker-cli
wercker dev
> wercker dev
wercker dev
コマンドはwercker.yml
の中のdevという名前のpipelineを実行します。基本的にローカルで開発をしているときに利用するコマンドです。
internal/watch
internal/watch
stepはいわゆる変更監視をしてくれるstepです。
プロジェクト内のファイルに変更があったときにcodeの内容を実行してくれます。
例えばこのように設定しておくと、
box: ruby:2.3.1
dev:
steps:
- bundle-install
- internal/watch:
code: |
bin/rake spec
reload: true
ファイルに更新があったタイミングで bin/rake spec を実行してくれます。(reload: true
を付ける必要があります)
Railsを使っている場合には、Guardなどを使って自動的にRspecを実行している人も多いでしょうが、こちらをつかうとビルドツールと同じ環境でRSpecを常時実行することができます。
internal/shell
internal/shell
stepは pipeline の実行中にコンテナの中のシェルに入って、任意のコマンドを実行することができます。
box: ruby:2.3.1
dev:
steps:
- bundle-install
- internal/shell:
cmd: /bin/bash
これで、wercker dev
を実行するとビルドプロセス(例えば、bundle-install)が流れた後に、コンテナ内のシェルプロンプトが表示されます。wercker.yml
の設定などで問題が起きた場合やデプロイがうまく通らない場合のトラブルシューティングに便利です。
wercker build
wercker build
コマンドはwercker.yml
の中のbuild pipeline
を実行します。こちらのコマンドは、 dev コマンドよりもよりWercker
上で実行している環境に近い環境で実行してくれるのでbuildプロセスや デプロイプロセスの確認に利用することができます。
wercker pull
> wercker pull springkuma/test_repository
wercker pull
コマンドを使うとwerckerに登録しているリポジトリの最新のビルドをローカルにpullしてくることができます。1
wercker pull
コマンドを利用するためにはbuild pipeline
などでinternal/store-container
というstepを実行しておく必要があります。(これによって、pullしてくる用のビルドイメージが保存されるようです)
box: ruby:2.3.1
build:
after-steps:
- internal/store-container
また、Wercker
にユーザ登録するときにGitHub
の認証を利用して認証した場合には以下の手順を実行してローカル環境にトークンを保存する必要があります。
-
Settings > Personal tokens
でwercker-cli
という名前でトークンを生成 - ローカル環境の
~/.wercker/token
というファイル名で、1.
のトークンを保存
認証に関しては以下の記事を参考にさせていただきました。ありがとうございます。
-
実はこちらの手順でどうしても上手くいかなかったので、werckerにissueを投げる予定です… ↩