Redmineのプラグインのポーティングメモ (to Redmine2.0.x)
今回の内容: Redmineのプラグインのポーティング情報、対応したプラグインは少しずつ増えてきているので、今回はテスト、Jenkins利用時にちょっと困った部分と自分なりの対応を書いてみます。ちょっと長いので、まとめを先に書くと、下記のとおりです。
以下はこのポイント発見までの顛末です。
* * *
なぜなら、
Redmineのバージョンアップによる機能向上 >>>>>> 越えられない壁 >>>> プラグインによる機能追加
なので…。
自分の職場では、諸々の事情でまだRedmine1.3なので、そんなに困ってはいないのですが、いったん公開してしまったプラグインに関しては、ポーティングしないといけなくなります。特に、春先はRedmine1.4 –> Redmine2.0.xと、rubyのベースもRailsのバージョンも上がってさあ大変!
さすがにRedmine2.0のリリース近辺に対応することはできませんでした。
少し落ち着いてから、いろんなBlog上の情報,Redmine本家の情報,先行して対応しているプラグインのソースを頼りに対応開始。とくに下記のサイトは大変お世話になりました。ありがとうございます!
このジョブ、当然のことながら、いままでのステップを使ってソースだけ変わっても失敗…。せっかく勉強を兼ねてテストする習慣がついたのに、ここで挫折するのは勿体ない(?)
ということで、コマンドラインでのUnit Testから再度進めてみました。
そこで問題になったのが、ここ。
rake db:migrate RAILS_ENV=test が通らない!!
RAILS_ENV=production, RAILS_ENV=developmentは通るのですが、test の指定をすると、ことごとくrake taskが失敗してしまいます!
#プラグインが既存のコントローラーに対するパッチだったりすると、全部カバーするには、テストコードも工夫しないといけないので、Redmine本体のtestディレクトリの中身も参考にするようになりました。
カバレッジについては、Rails3, ruby1.9, JenkinsなどのCIツールを使う場合は、SimpleCovを使うといいよ!という記事がたくさんあります。おかげ様で、その方法に従うと、自分のNotePC内で、コマンドラインでの実行では、綺麗なレポートが出てくれました。(Windows7, Ruby1.9です)
また、同じNotePC内で、Jenkinsを使ってテストを通した場合でも、綺麗なレポートが出てくれました。
ですが、r-labsのJenkinsを使ってみると、テストは通るものの、coverage/rcov 以下には、index.html しか生成されません!(で、テストは100%…)
なぜだろうと思い、ひとまず手近なCentOSで同じように組んでみたのですが、やっぱり、coverage/rcov 以下には、index.html のファイル1つしか出来ず、網羅しているコードについては何もなし。『こんな100%なんて嬉しくないよ~!!』という状態です。
なにかSimpleCovの問題に違いない....と思うこと一週間、ようやく同様の事例を発見!
対応としては、SimpleCov.start 'rails' じゃなくて、SimpleCov.start だけでオッケーというものが多く見受けられたので、その通りにすると、あっさり解決!
おかげさまで、サーバ上のJenkinsでもカバレッジレポートの表示が再度できるようになりました。
なお、Jenkinsに合わせた、SimpleCovの出力フォーマットだと、HTMLとしては地味な感じです。一方で、SimpleCovの標準のレポートは、それはそれは洒落ている感じです。

わたしはデフォルトのほうがすきなので、JENKINSを使ってる(環境変数での切り替えですが)場合だけ、フォーマットを変えるという設定にしました。
最後まで読んで下さった方、ありがとうございます!なにかの参考、ヒントになれば幸いです。
- 1. ポーティングのための参考URLはここが良いよ!
- 2. RAILS_ENV=testのエラーの場合は、Redmine本体のGemfileを修正してみよう
- 3. SimpleCovのレポートがCI上でできないときは、SimpleCov.start だけにしてみよう
以下はこのポイント発見までの顛末です。
* * *
1. はじめに: ひとまずポーティング
必要に迫られて、少しずつ書くようになった、Redmineのプラグイン。これも、Redmine本体のバージョンが上がると、見直しをしないといけなくなります。なぜなら、
Redmineのバージョンアップによる機能向上 >>>>>> 越えられない壁 >>>> プラグインによる機能追加
なので…。
自分の職場では、諸々の事情でまだRedmine1.3なので、そんなに困ってはいないのですが、いったん公開してしまったプラグインに関しては、ポーティングしないといけなくなります。特に、春先はRedmine1.4 –> Redmine2.0.xと、rubyのベースもRailsのバージョンも上がってさあ大変!
さすがにRedmine2.0のリリース近辺に対応することはできませんでした。
少し落ち着いてから、いろんなBlog上の情報,Redmine本家の情報,先行して対応しているプラグインのソースを頼りに対応開始。とくに下記のサイトは大変お世話になりました。ありがとうございます!
- Redmine 2.0.xにプラグインを移植する - Haru’s Blog
- Redmine2.0へのプラグインのマイグレーションについて – Alminium on Github
2. RAILS_ENV=test にしてテストしたのだけれど…
ひとまずポーティングが完了したのですが、プラグインの幾つかはr-labsのJenkinsにお世話になっています。(RORもテストコードも良くわかっていないのですが、見よう見まねでテストコードを書き、Jenkinsでテストを通させていただいてます)このジョブ、当然のことながら、いままでのステップを使ってソースだけ変わっても失敗…。せっかく勉強を兼ねてテストする習慣がついたのに、ここで挫折するのは勿体ない(?)
ということで、コマンドラインでのUnit Testから再度進めてみました。
そこで問題になったのが、ここ。
rake db:migrate RAILS_ENV=test が通らない!!
RAILS_ENV=production, RAILS_ENV=developmentは通るのですが、test の指定をすると、ことごとくrake taskが失敗してしまいます!
/usr/local/lib/ruby/1.9.1/test/unit.rb:167:in `block in non_options': file not found: db:migrate (ArgumentError)….
途中まではうまくいってたのに、上記のように、『そんなrake taskは無いよ(?)』といったメッセージが出てあえなく終了…。(おんなじrake taskはtest以外なら通ります)
こんな状態でどうやってテストしてるんだろう??r-labsのCode Reviewのジョブは通ってるのに??、と悩むこと一週間…。
やっと、Redmine本家で解決につながる情報を見つけました。
- Running rake in test environment causes exception (Redmine.org #10818)
- https://github.com/Vanuan/redmine/commit/db12487dddf5cc73e1266447e9d23676d187af5d
3. CI(Jenkins)サーバ上で、SimpleCovのカバレッジレポートが出来ない!
RAILS_ENV=test 問題が解決しても、すぐにはテスト完璧!とは行かず、もちろん諸々直しています。書き方もちゃんと勉強してるわけではないし、RSpecとかって何?Fixturesでがんばります、な状態ですが、とにかく「カバレッジだけは高いパーセントを維持したい!」ということで、怪しいながら、ほぼほぼコードをカバーするようにテストコードを書いてみました。#プラグインが既存のコントローラーに対するパッチだったりすると、全部カバーするには、テストコードも工夫しないといけないので、Redmine本体のtestディレクトリの中身も参考にするようになりました。
カバレッジについては、Rails3, ruby1.9, JenkinsなどのCIツールを使う場合は、SimpleCovを使うといいよ!という記事がたくさんあります。おかげ様で、その方法に従うと、自分のNotePC内で、コマンドラインでの実行では、綺麗なレポートが出てくれました。(Windows7, Ruby1.9です)
また、同じNotePC内で、Jenkinsを使ってテストを通した場合でも、綺麗なレポートが出てくれました。
ですが、r-labsのJenkinsを使ってみると、テストは通るものの、coverage/rcov 以下には、index.html しか生成されません!(で、テストは100%…)
なぜだろうと思い、ひとまず手近なCentOSで同じように組んでみたのですが、やっぱり、coverage/rcov 以下には、index.html のファイル1つしか出来ず、網羅しているコードについては何もなし。『こんな100%なんて嬉しくないよ~!!』という状態です。
なにかSimpleCovの問題に違いない....と思うこと一週間、ようやく同様の事例を発見!
- https://github.com/colszowka/simplecov/issues/82 (No data is generated)
対応としては、SimpleCov.start 'rails' じゃなくて、SimpleCov.start だけでオッケーというものが多く見受けられたので、その通りにすると、あっさり解決!
おかげさまで、サーバ上のJenkinsでもカバレッジレポートの表示が再度できるようになりました。
なお、Jenkinsに合わせた、SimpleCovの出力フォーマットだと、HTMLとしては地味な感じです。一方で、SimpleCovの標準のレポートは、それはそれは洒落ている感じです。
わたしはデフォルトのほうがすきなので、JENKINSを使ってる(環境変数での切り替えですが)場合だけ、フォーマットを変えるという設定にしました。
if ENV['JENKINS'] == "true"ということで、今回はここまで。
SimpleCov.formatter = SimpleCov::Formatter::RcovFormatter
end
最後まで読んで下さった方、ありがとうございます!なにかの参考、ヒントになれば幸いです。
コメント
コメントを投稿