34
Copyright Drecom Co., Ltd. All Rights Reserved. Paraductをエクストリームリリース します @sue445 2014/11/01 ShibuyaRubyKaigi

Paraductをエクストリームリリースします #428rk01

Embed Size (px)

DESCRIPTION

渋谷Ruby会議01( http://regional.rubykaigi.org/shibuya01/ )で話したスライドです http://rubygems.org/gems/paraduct https://github.com/sue445/paraduct

Citation preview

Page 1: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

Paraductをエクストリームリリースします

@sue4452014/11/01 ShibuyaRubyKaigi

Page 2: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

@sue445

● drecom○ ソーシャルゲームとか○ 社内ツールとか社内ライブラリとかサーバサイド

全般見てる● 渋谷.rb

○ ほぼ毎回自作ツールや自作gemの発表している

○ RubyKaja 2014● プリキュアおじさん

○ 最近フルスタックキュアエンジニアになった(TVシリーズと劇場版完走)

自己紹介

Page 3: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

RubyKaja2014

Page 4: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

ワタシハ テスト チョットデキル

https://suzuri.jp/sue445/62900/t-shirt/s/brightgreen

Page 5: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

今期の嫁:キュアハニー

Page 6: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

本妻:キュアピース

Page 7: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

Next Precure is (maybe) “Go! プリンセスプリキュア” ,

and my name is Go .

来期のプリキュア情報

Page 8: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

● Paraduct is 何?● 現状確認● 概要● エクストリームリリース

Agenda

Page 9: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

Paraduct とは

Page 10: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

マトリクステストのためのgemです

Paraduct とは

Page 11: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

現状確認

Page 12: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

よくある社内gem (acts_as_xxxxxxxxx)

● サポートするRubyのバージョン○ Ruby 2.0系○ Ruby 2.1系

● サポートするRailsのバージョン○ Rails 3.2系○ Rails 4.0系○ Rails 4.1系

現状確認

Page 13: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

2 x 3 = 6ジョブ (;´Д`)

Jenkinsのジョブ増えすぎ問題

Page 14: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

Travis CIみたいにyamlで簡単にマトリクステストしたい

Page 15: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

● pushしてから実際にテストが実行されるまでに時間がかかる○ pushしてからジョブが始まるまでに数分かかることもある

● githubでしか使えない○ 弊社 is Gitlab

● (CaaS全般に言えるけど)社外から社内にホスティングしてるgemをとってこれない○ proxy経由しないとgem installできない

Travis CIの問題点

Page 16: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

マトリクステストを手軽に実行ためのgem

を作った

そこで

Page 17: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

● Paraduct = parallel + parameterize + product(掛け算の積)

● 複数のパラメータを掛けあわせて並行してテスト実行する

● gemだけどruby以外のテストもできます(後述)

https://github.com/sue445/paraduct

Paraduct概要

Page 18: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

設定ファイル

Page 19: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

設定ファイル

実行するスクリプト

掛け合わせるパラメータ

Page 20: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

設定ファイル

実行するスクリプト

掛け合わせるパラメータ

export RUBY=xxxxx; export GEMFILE=xxxxx; ./build.sh

Page 21: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

テストの仕組み

app

Page 22: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

コマンド実行

app

$ paraduct test

Page 23: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

ファイルを別のディレクトリにコピーする

app

tmp/RUBY_2.0_RAILS_3.2

tmp/RUBY_2.0_RAILS_4.0

::

1. rsync

Page 24: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

パラメータを渡してテストを並列実行

app

tmp/RUBY_2.0_RAILS_3.2

tmp/RUBY_2.0_RAILS_4.0

::

RUBY=2.0 RAILS=3.2 ./build.sh

RUBY=2.0 RAILS=4.0 ./build.sh

2. run scripts

Page 25: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

全部終了するまで待つ

app

tmp/RUBY_2.0_RAILS_3.2

tmp/RUBY_2.0_RAILS_4.0

::

RUBY=2.0 RAILS=3.2 ./build.sh

RUBY=2.0 RAILS=4.0 ./build.sh

or

All successful

3. finish

Even one failure

Page 26: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

Paraductはパラメータを組み合わせてスクリプトを実行するた

めのラッパー

Page 27: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

シェルが使えればruby以外のテストも出来ます

Page 28: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

gem installできれば

Jenkins以外でもparaduct使えます

(Circle CIで動作確認済)

Page 29: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

シェルを実行するだけなのでぶっちゃげRubyじゃなくてよかったんだけど

● 配布しやすさ (Rubygems)● インストールしやすさ (Rubygems)● リリースのしやすさ (rake release)● テストしやすさ (RSpec)● 自分のスキルセット (Java, Groovy, Ruby, JavaScript)

を加味してRubyを選択

なぜgemか?

Page 30: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

● travisと違い全部ローカルで実行するのでジョブごとの排他制御が難しい○ script内でvagrant立ち上げて独立した環境で動かせば

いけそう● 全部ローカルで実行するのでCPU負荷かかる

○ 10プロセスでbundle installするときついw○ 同時に実行するスレッド数の上限は設定できる

● 最低限動く実装しかないのでかゆいところに手が届くオプションがない○ travisのallow_failuresとか

デメリット(既知の問題)

Page 31: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

● Paraductを使えばTravis CI以外でもマトリクステストができる

● Paraductを使えばJenkinsのジョブを減らせる

まとめ

Page 32: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

エクストリームリリース

Page 33: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

0.0.1.beta17 -> 0.0.1

Page 34: Paraductをエクストリームリリースします #428rk01

Copyright Drecom Co., Ltd. All Rights Reserved.

http://rubygems.org/gems/paraduct

ご清聴ありがとうございました!