23
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Circle CIで複数Rubyバージョンを平行してテストする

ちまたで話題のCircle CI https://circleci.com/
やってみようと、あるRubyGemsのプロジエクトをCircle CIに突っ込みました。

とりあえず回したところ、テスト用のRubyバージョンはcircle.ymlによって1つを指定するタイプだった。

Travis CIはこんな感じで複数のRubyバージョンを指定できるんですよねー。

.travis.yml
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

と、すぐに案内してくれたワークアラウンドがこちら。

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 の設定を変更します。

Edit_settings_-_giraffi_ruby-orchestrate_io_-_CircleCI-3.png

これでビルドすると。

_33_-_giraffi_ruby-orchestrate_io_-_CircleCI.png

おー、2コンテナで起動しました。

テストも別々の表示で、平行に進みます。

_34_-_giraffi_ruby-orchestrate_io_-_CircleCI-4.png

コンテナ(0)はRuby2.0.0, コンテナ(1) はRuby1.9.3でテストが走りました!

_34_-_giraffi_ruby-orchestrate_io_-_CircleCI-6.png

Rcovによるカバレッジも、ファイル名の後にコンテナ番号がついで別々に収集。

_33_-_giraffi_ruby-orchestrate_io_-_CircleCI-2.png

無事、複数RubyでやってくれというDevの要望に答えることができました。

コンテナIDで処理を分けるやり方は、他にも面白いことができそうですね。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
23
Help us understand the problem. What are the problem?