くりにっき

フルスタックキュアエンジニアです

【追記あり】Travis CIでMJITを有効にしたビルドマトリクスを作る

何番煎じか分からないけど自分用メモ

tl;dr;

.travis.yml に下記のようなものを書くだけ

script:
  - RUBYOPT=$RSPEC_RUBYOPT bundle exec rspec

matrix:
  include:
    - rvm: 2.6
      env: RSPEC_RUBYOPT="--jit"
    - rvm: ruby-head
      env: RSPEC_RUBYOPT="--jit"

実行結果

https://travis-ci.org/sue445/rubicure/builds/473290010

f:id:sue445:20181229205640p:plain

ビルドスクリプト内で RUBYOPT="--jit" bundle exec rspec とかしてもいいんですが、それだとビルドがコケた時にJIT起因の問題なのかそうじゃないのかが分かりづらくなるのでこっちを推奨です。

あと、

rvm:
  - 2.6
  - ruby-head

を書いていた場合に、MJIT無しのビルドとMJIT有りのビルドが両方実行されて、MJITの有無でどれくらいビルドの時間が変わっているか比較しやすいというメリットもあります。

2019/6/19 追記

6/18くらいのCIからRuby 2.6系にも関わらず invalid option --jit というエラーが起きるようになりました

$ export RUBYOPT="--jit"

$ rvm use 2.6 --install --binary --fuzzy

ruby: invalid option --jit  (-h will show valid options) (RuntimeError)

https://travis-ci.org/sue445/omniauth-chatwork/jobs/547082488

いやいやそんなことないだろーと思ってたら、rspecの実行よりも前にエラーが起きているのでどうやらビルドの初期化のタイミングでTravisの中のRubyスクリプトが実行されていて、そいつがRuby 2.6未満なのが原因のようでした。

.travis.ymlRUBYOPT を上書きしないようにしたら --jit でコケないようになりました

github.com