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を投げる予定です… ↩