LoginSignup
24
23

More than 5 years have passed since last update.

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

Last updated at Posted at 2013-12-18

ちまたで話題の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で処理を分けるやり方は、他にも面白いことができそうですね。

24
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
23