gemの複数バージョンカジュアルテスト #shibuyarb
Post on 22-Jul-2015
1.619 Views
Preview:
TRANSCRIPT
gemの複数バージョンカジュアルテスト
@sue4452015/05/20 Shibuya.rb
自己紹介
sue445 @drecom● お仕事
○ iOS/Androidアプリの課金ライブラリのメンテ
○ 社内ツール、社内ライブラリ開発
○ サーバサイド全般(アプリ~インフラまで横断的に)○ TDDおじさん
○ PO (Precure Ojisan)● Twitterは上級者向けのアカウントなのでフォロー厳禁
○ 30分間で200ツイート以上流れるよ!!
● Shibuya.rb (RubyKaja 2014)
【今期の嫁】キュアトゥインクル
今期の黄色は肩背中出し!!!!
【本妻】キュアピース
はじめにいくつか質問
【質問1/5】
gemを作ったことある
人?
【質問2/5】
作ったgemのテストをし
ている人?
【質問3/5】
複数のRubyのバージョ
ンでテストしてる人?(例. Ruby2.0, 2.1, 2.2系)
【質問4/5】
Rails系のgemを作って
る人?
【質問5/5】
複数のRailsのバージョ
ンでテストしてる人?(例. Rails 4.0, 4.1, 4.2系)
複数のrubyのバージョン
複数のgemのバージョン
でカジュアルなテストを!
Agenda
● Travis CIを使う○ 複数のRubyのバージョンでテストをする
○ 複数のRailsのバージョンでテストをする
● Jenkinsを使う○ マルチ構成プロジェクト
● まとめ
最初にまとめ
Travis CI使う方がめっ
ちゃ楽
Travis CIを使う
CI系のサービスはいくつかあるけど(Circle CI, Werckerなど)、カジュアルに複数バージョン系の
テストを行えるのはTravis CIのみ
Travis CIで複数のRubyバージョンのテスト
bundle gemした直後の .travis.ymllanguage: ruby
rvm:
- 2.2.2
Travis CIで複数のRubyバージョンのテスト
いい感じに編集した .travis.ymllanguage: ruby
rvm:
- 2.0.0-p598
- 2.1.6
# こういう書き方をすれば2.2.x系の最新版を使う
- 2.2
Travis CIで複数のRubyバージョンのテスト
Travis CIの結果
Travis CIで複数のRailsバージョンのテスト
.travis.yml にgemfileを追記
gemfile:
- gemfiles/rails3_2.gemfile
- gemfiles/rails4_0.gemfile
- gemfiles/rails4_1.gemfile
- gemfiles/rails4_2.gemfile
Travis CIで複数のRailsバージョンのテスト
gemfiles/rails4_2.gemfilesource 'https://rubygems.org'
gem 'rails', "~> 4.2.0"
gemspec :path => '../'
Travis CIで複数のRailsバージョンのテスト
gemspec spec.add_dependency "rails"
# 下記のように書いても可
# spec.add_dependency "rails", ">= 3.2.0", "<
5.0"
【おまけ】Rails3系と4系でテストしたいけどRails4系でしか使えないgemも使いたい
当時やりたかったこと
● Rails 3.2, 4.0, 4.1, 4.2系でテスト
● activerecord-turntable(DBのカジュアル水
平分割gem)と組み合わせた場合のテストをし
たい
○ https://github.com/drecom/activerecord-turntable
○ turntableの最新はactiverecord 4.0以降のみ対応
○ Rails 3系ではturntableはテストしない
だがしかし
普通にこうすると
spec.add_dependency "rails"
spec.add_development_dependency "activerecord-
turntable", ">= 2.0.0"
だがしかし
rails 3.2系だとbundle installで詰む
multiple_version_test_sample (>= 0) ruby depends on
rails (= 3.2.21) ruby depends on
activerecord (= 3.2.21) ruby depends on
activemodel (= 3.2.21) ruby depends on
activesupport (= 3.2.21) ruby
activerecord-turntable (>= 2.0.0) ruby depends on
activesupport (>= 4.0.0) ruby
【解決方法】グローバル変数を利用w
gemfiles/rails4_x.gemfilesource 'https://rubygems.org'
$rails_version = "4.2.0"
gem 'rails', "~> #{$rails_version}"
gemspec :path => '../'
【解決方法】グローバル変数を利用w
gemfiles/rails4_x.gemfilesource 'https://rubygems.org'
$rails_version = "4.2.0"
gem 'rails', "~> #{$rails_version}"
gemspec :path => '../'
【解決方法】グローバル変数を利用w
gemspec spec.add_dependency "rails"
if !$rails_version || $rails_version.to_i == 4
spec.add_development_dependency
"activerecord-turntable", ">= 2.0.0"
end
【解決方法】グローバル変数を利用w
gemspec spec.add_dependency "rails"
if !$rails_version || $rails_version.to_i == 4
spec.add_development_dependency
"activerecord-turntable", ">= 2.0.0"
end
普通にbundle installするとグローバル変数がないので左側が評価
【解決方法】グローバル変数を利用w
gemspec spec.add_dependency "rails"
if !$rails_version || $rails_version.to_i == 4
spec.add_development_dependency
"activerecord-turntable", ">= 2.0.0"
end
gemfile経由だとグローバル変数があるので右側が評価
Jenkinsのマルチ構成プロジェクト
Jenkinsのマルチ構成プロジェクト
ここで定義した環境変数の組み合わせでジョブが実行される
Jenkinsのマルチ構成プロジェクト
ビルド結果
Jenkinsでの注意点
● 受け取った環境変数を元にRubyのバージョン
やgemfileを切り替える部分はビルドスクリプト
内で頑張る
● 組み合わせが多すぎるとJenkinsのキューが詰
まるのでSlaveを増やす
今回のサンプルプロジェクト
https://github.com/sue445/multiple_version_test_sample
参考URL
● http://docs.travis-ci.com/user/languages/ruby/
● http://docs.travis-ci.com/user/build-configuration/
まとめ
Jenkinsでも頑張ればできない
ことはないけど、Travis CI使っ
た方がめっちゃ楽
top related