ちまたで話題のCircle CI https://circleci.com/ 。
やってみようと、あるRubyGemsのプロジエクトをCircle CIに突っ込みました。
とりあえず回したところ、テスト用のRubyバージョンはcircle.yml
によって1つを指定するタイプだった。
Travis CIはこんな感じで複数のRubyバージョンを指定できるんですよねー。
rvm:
- 2.0.0
- 1.9.3
早速サポートに聞いてみました。
We don't have very good support for build matrices at the moment. If you set up a build with 2x parallelization, you might be able to do something like:
circle.yml
と、すぐに案内してくれたワークアラウンドがこちら。
dependencies:
pre:
- case $CIRCLE_NODE_INDEX in 0) rvm use 2.0.0 --default ;; 1) rvm use 1.9.3 --default ;; esac
test:
override:
- ruby -v ; bundle exec rspec: {parallel: true}
うおお。。そうきたか。
ちなみに、ここで外部シェルを呼ぶのはアカン模様。
テストのruby -v
部分は私が確認のため追加しました。なくてもOK。
(中略)
The {parallel: true} modifier at the end tells us to run the command on every node.
Let me know if you need any help with that, and sorry about the hacky workaround.
『正直ハックですまんかった』とサポートの弁ですが、いやいや十分じゃあないですか。
やってみた
コンテナをパラレルで起動して、コンテナ番号によってバージョンが別れる様子をレポート。
複数のコンテナを同時に起動するには、Project Setting
> Parallelism
の設定を変更します。
これでビルドすると。
おー、2コンテナで起動しました。
テストも別々の表示で、平行に進みます。
コンテナ(0)はRuby2.0.0, コンテナ(1) はRuby1.9.3でテストが走りました!
Rcovによるカバレッジも、ファイル名の後にコンテナ番号がついで別々に収集。
無事、複数RubyでやってくれというDevの要望に答えることができました。
コンテナIDで処理を分けるやり方は、他にも面白いことができそうですね。