LoginSignup
10
8

More than 5 years have passed since last update.

【TravisCI高速化】並列実行で実行時間を短縮する

Last updated at Posted at 2014-07-24

はじめに

効果

  • 並列で回す分だけ早くなる
    • 例えば、単体テスト群と受け入れテスト群を分けて並列にするなど

やること

書き方

  • .travis.ymlにmatrixの記述を追加するだけ
  • .travis.ymlの例を載せます。というかこれが全てです
.travis.yml
...
env:
  matrix:
    - TEST_TARGET=spec
    - TEST_TARGET=cucumber
script:
  - "bundle exec rake $TEST_TARGET"
...

実行結果

  • このように書くと、以下のように並列でビルドが走る

    • 以下の例だと73.1と73.2
  • travis.png

  • ビルド一覧からみると2つのビルドの合計時間が書かれているが実際にかかった時間はビルド時間が長い方

  • ビルド一覧に出る時間
    travis2.png

分割したビルドでそれぞれ別の処理(before_scriptなど)をさせたい場合

  • .travis.ymlに書いている処理がビルドを分割することで片方では必要だがもう一方では必要ないということもあるでしょう
  • そんなときは以下のようにscriptを外に出しちゃえばいいのです
    • 後はコマンド叩く部分をmethod化するのもよし
.travis.yml
...
script:
  - 'ruby .travis/travis.rb'
...
.travis/travis.rb
...
commands = [
  'sudo cp -p /etc/localtime /etc/localtime.bak',
  'sudo rm /etc/localtime',
  'sudo ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime'
]
if ENV['TEST_TARGET'].include?('cucumber')
  commnads.each do |command|
    system("#{command} > /dev/null 2>&1")
  end
end
... 
  • $TEST_TARGETがcucumberのときのみタイムゾーンを変更する例

~ただの宣伝~

  • 全国のSeleniumer必読
  • Seleniumerといっていますが、Selenium, SauceLabs, Travis, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください
10
8
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
10
8