はじめに
- 【TravisCI高速化】bundle installを毎回走らせないようにキャッシュするで高速化を実現した
- もっとできないかとチャレンジしたらさらに高速化できたのでご紹介
効果
- 並列で回す分だけ早くなる
- 例えば、単体テスト群と受け入れテスト群を分けて並列にするなど
やること
書き方
- .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
-
ビルド一覧からみると2つのビルドの合計時間が書かれているが実際にかかった時間はビルド時間が長い方
分割したビルドでそれぞれ別の処理(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に関するノウハウ書いているのでよかったら参考にしてみてください