gemの複数バージョンカジュアルテスト #shibuyarb

Post on 22-Jul-2015

1.619 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

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を増やす

まとめ

Jenkinsでも頑張ればできない

ことはないけど、Travis CI使っ

た方がめっちゃ楽

top related