Watson's Blog

Jenkins に TAP Plugin というものを導入しました

| Comments

Amazon で手頃な Mac mini を購入して、Jenkins で日々 RubyMotion をテストしています。

テスト実行結果の出力形式として Test Anything Protocol (TAP) というものがあります。

RubyMotion では Spec を実行する際に output という環境変数で出力形式を TAP にすることができます(他にも spec_dox, fast, test_unit, knock, rubymine を指定できます)。

1
$ rake spec output=tap

Jenkins では TAP Plugin というプラグインを導入すると、この TAP 形式に対応することができます。これを導入するとテスト数の増減(Faild が増えたとか)がグラフ表示されておしゃれな感じです。

TAP のグラフ TAP のグラフ

TAP Plugin の導入

Jenkins のプラグイン管理画面で “Jenkins TAP Plugin” にチェックを入れます。

Jenkins TAP Plugin

プロジェクトの設定

“Jenkins TAP Plugin” を導入するとプロジェクトの設定画面で、ビルド後の処理に TAP Plugin に関する設定項目が追加されます。

Jenkins TAP Plugin

テスト結果をいったんファイルに保存し、そのテスト結果が書かれたファイルを TAP Plugin が読み込んで処理をするようです。

以下のような、Jenkins で spec を実行するためのスクリプトを用意しました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
require "optparse"
require "tempfile"

stderr_file = Tempfile.new("stderr") {}

opt =  OptionParser.new
rake = "rake"
output_path = nil
opt.on('--bundle') {|v|
  rake = "bundle exec #{rake}"
}
opt.on('--output=filename') {|v|
  output_path = v
  system "rm -rf #{output_path}"
}

opt.parse!(ARGV)

# run spec
system "#{rake} clean"
system "#{rake} spec output=tap SIM_STDOUT_PATH=#{output_path} SIM_STDERR_PATH=#{stderr_file.path}"

あとは、Jenkins でプロジェクト毎に以下のようなコマンドを記述して、テストを実行するようにしてます。

1
run_spec --bundle --output=$WORKSPACE/result.txt

Jenkins shell command

Comments