マトリックステストとは?
複数のパラメータを掛けあわせてテストを実行することです
(例:Ruby 2.1系、2.2系、2.3系 x Rails 4.2系、5.0系 = 計6パターンのテストを行うこと)
Travis CIの方がもっと手軽に行う事ができるのでOSS開発の場合はそっちを使うといいと思います
参考
マトリックステストの行い方
「新規ジョブ作成」で「マルチ構成プロジェクトのビルド」でプロジェクトを作成します
「マトリックスの設定」でテストしたい軸とパラメータを記述するだけです
実行結果
実際にジョブを実行するとこういう風になります
マトリックスの設定で設定したパラメータはジョブ実行時に環境変数にセットされているので、スクリプト内でrbenvとかによしなに渡してやればそのパラメータでテストを行うことができます
結果
問題点
Jenkinsでも簡単にマトリックステストが実践できますがいくつか問題点があります
軸の設定をジョブにハードコーディングする必要がある
ジョブが1つだけならいいんですが同じリポジトリで複数のジョブを作成した時に、パラメータを追加したい時は全てのジョブに設定を反映させる必要があります
除外設定が面倒
特定の組み合わせだけテストを除外したい(例:Ruby2.1系ではRails 5.0は動かないのでテストする必要ない)ような場合に、標準で使える「組み合わせフィルター」だとGroovy式で設定する必要があります *1
右上はスキップされたので色が薄いです
できないことはないのですが、複数条件になると見づらいし、さっきと同様ジョブにハードコーディングされているので条件変えたい時に全てのジョブに手動で反映させる必要があります。
俺はTravis CIみたいにリポジトリにコミットしたymlファイルでテストしたいんじゃああああああ!!!11111
というわけでJenkinsプラグインを作りました
Yaml Axis Plugin - Jenkins - Jenkins Wiki
先日ブログにも書いたので記憶に新しい人もいると思います。
今日リリースした v0.2.0でパラメータの特定の組み合わせのみ除外することもymlでできるようになりました!(Travis CIの matris.exclude とほぼ同等の機能)
使い方
# axis.yml RUBY: - 2.1.8 - 2.2.4 - 2.3.0 RAILS: - 4.2.0 - 5.0.0.beta2 exclude: - RUBY: 2.1.8 RAILS: 5.0.0.beta2
ジョブの設定
Yaml Axisを選択
Yaml matrix execution strategyを選択
全く同様の結果が得られます
最初の例と違って動的に変化する値はリポジトリ内のymlから参照するため「パラメータを追加したい時に複数のジョブに設定を反映させる必要がある」という問題は解決しています。
また、除外設定もymlを利用するのでワンライナーのGroovy式よりは見やすいかと思います。
その他詳しいことはGitHub か wiki を御覧ください。
Jenkinsでマトリックステストをガリガリやってる人は是非Yaml Axis Pluginをご利用ください!
*1:Groovy式がtrueで評価された時のみ実行