[Ruby][イベント][Jenkins][Redmine]Jenkins,Redmine使いこなし勉強会に参加しました と、ちょっとプラグイン作ってみた #jen_red
概要
前半は発表のメモ。後半は実際にプラグイン作ったりインストールしたりのメモ。
Redmineプラグイン活用入門 - @[http://twitter.com/Kokawa_Takashi:title]さん
注意:Redmine開発環境が安定していないので、すぐ陳腐化してしまう事がある!
Redmineにおける問題
- Redmineの設定で解決
- 運用で解決
- ツール自体を拡張して解決
- プラグインの探し方・おすすめ
- REST APIを使って外部から
- プラグインを作る
プラグインの探し方・おすすめ
- http://www.r-labs.org/projects/r-labs/wiki/Redmine%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E9%9B%86:title
- http://www.redmine.org/plugins:title
- 一つだけおすすめを… Wiki Extensions Plugin
- オートプレビュー
- 任意のページをメニューに
- 任意のページを埋め込み 等々…
- 他のおすすめ
- CodeRevirew
- Backlogs
- TimeTracker
REST API
- 自動でチケットを作ったりできる
- チケット一覧を取得できたり
- この一連の流れができたらJenkinsに任せる事ができる
- 期日が間近のチケットのメール通知などもできる
プラグインを作る
- Redmine1.4 or 2.0が対象(Ruby1.9,Bundler対応している/これ以前はしていない)
- プラグイン開発環境構築がつらいので
Ruby環境
- WindowsならRubyInstaller + DevKit
- MacならRVM
Redmineインストール
- 公式を参考に
- rmagickを除外する
bundle install -without development test rmagick -path vendor/bundle
Rubyデバッグ環境
- ruby-debug-ide…だがこの環境ではうまく動かなくなってしまった
- ruby-debug-base19が必要らしいが、そのまま落としてきても動かない
- preオプションを入れる
gem install ruby-debug-base19 --pre
gem install ruby-debug-ide --pre
NetBeans
- ただし、公式サポートは6.9.1が最終
一つだけシンプルなプラグインを
- Redmineのメニューからヘルプを消す
- スケルトンを作ってinit.rbに一文足すだけ
- 最後に試してみるよ
Jenkinsプラグイン活用入門- @[http://twitter.com/cactusman:title]さん
Jenkinsとは
- 高性能Cron
プラグインの探し方
- 探す前に…
- shやbatなどをうまく組み合わせられないかなどをまず考える
- Jenkins自体の昨日もうまく使う
- プラグイン自体は本家に登録されている
- Jenkins Plugin Hub
- ソフト、ツール名などでとりあえず引っ掛けてみる
プラグインの使い方
- すごくメンテされているものとほったらかされているものでまちまち
- コミットやDL数を見てみる
- TackScanerPlugin
- キーワードを拾う(TODOなど)
- 最後に入れてみる
- DickUsagePlugin
- Jenkinsのディスク使用量を見る
- JobConfigHistoryPlugin
- 設定ファイルのバックアップ、差分表示
プラグインのハック
- エクステンションポイントを継承する
- Notifierを継承すれば通知系の事ができる
- mvnにおまじないを追加する
- Jenkinsの公式Pluginが参考になる
実際にやってみる(Redmine)
メニューの一部を消してみる。
環境
- Windows XP
- Ruby 1.8.7
- Redmine 1.0.0.stable (SQLite)
手順
- はじめにRedmine Pluginのスケルトンを作成する。名前はdelete_menuとした
$ cd REDMINE_ROOT
$ ruby script\generate redmine_plugin delete_menu
./script/../config/../vendor/rails/railties/lib/rails/gem_dependency.rb:119:Warning: Gem::Dependency#version_requirements is deprecated and will be removed on or after August 2010. Use #requirement
create vendor/plugins/redmine_delete_menu/app/controllers
create vendor/plugins/redmine_delete_menu/app/helpers
create vendor/plugins/redmine_delete_menu/app/models
create vendor/plugins/redmine_delete_menu/app/views
create vendor/plugins/redmine_delete_menu/db/migrate
create vendor/plugins/redmine_delete_menu/lib/tasks
create vendor/plugins/redmine_delete_menu/assets/images
create vendor/plugins/redmine_delete_menu/assets/javascripts
create vendor/plugins/redmine_delete_menu/assets/stylesheets
create vendor/plugins/redmine_delete_menu/lang
create vendor/plugins/redmine_delete_menu/config/locales
create vendor/plugins/redmine_delete_menu/test
create vendor/plugins/redmine_delete_menu/README.rdoc
create vendor/plugins/redmine_delete_menu/init.rb
create vendor/plugins/redmine_delete_menu/lang/en.yml
create vendor/plugins/redmine_delete_menu/config/locales/en.yml
create vendor/plugins/redmine_delete_menu/test/test_helper.rb
- vendor/pluginにredmine_delete_menuというフォルダができている
$ ls
...
redmine_delete_menu/
...
$ cd redmine_delete_menu
$ ls
README.rdoc assets/ db/ lang/ test/
app/ config/ init.rb* lib/
- init.rbに例の一文を挿入
Redmine::Plugin.register :redmine_delete_menu do
...
+ delete_menu_item :top_menu, :help
end
- そして起動
$ cd REDMINE_ROOT
$ ruby script\server -e production
=> Booting WEBrick
=> Rails 2.3.5 application starting on http://0.0.0.0:3000
./script/../config/../vendor/rails/railties/lib/rails/gem_dependency.rb:119:Warning: Gem::Dependency#version_requirements is deprecated and will be removed on or after August 2010. Use #requirement
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2012-05-28 19:15:50] INFO WEBrick 1.3.1
[2012-05-28 19:15:50] INFO ruby 1.8.7 (2010-12-23) [i386-mswin32]
[2012-05-28 19:15:50] INFO WEBrick::HTTPServer#start: pid=4640 port=3000
- http://localhost:3000 にアクセスすると…おお! 消えてる!
環境その2
Ruby1.9、Redmine1.4でもやってみるかー。
- Windows XP
- Ruby 1.9.3
- Redmine 1.4.0.stable (SQLite)
手順その2
- いきなりgenerateしようとしたらbundle installしろと言われた
$ ruby script\generate redmine_plugin delete_menu
Some gems may need to be installed or updated.
Please run `bundle install --without development test`.
- なのでbundle install
$ bundle install --without development test --path ./vendor/bundle
Fetching source index for http://rubygems.org/
Installing rake (0.9.2.2)
Installing activesupport (2.3.14)
Installing rack (1.1.3)
Installing actionpack (2.3.14)
Installing actionmailer (2.3.14)
Installing activerecord (2.3.14)
Installing activeresource (2.3.14)
Installing coderay (1.0.6)
Installing i18n (0.4.2)
Installing mysql2 (0.2.18)
Installing net-ldap (0.3.1)
Installing pg (0.13.2)
Installing rails (2.3.14)
Installing rmagick (2.13.1) with native extensions
- rmagickが入らず止まりっぱなし……そういえば、rmagickは使わなければwithoutしてしまってもいいです的な事を言われていた気がするのでそれをプラス
$ bundle install --without development test rmagick --path ./vendor/bundle
Fetching source index for http://rubygems.org/
Using rake (0.9.2.2)
Using activesupport (2.3.14)
Using rack (1.1.3)
Using actionpack (2.3.14)
Using actionmailer (2.3.14)
Using activerecord (2.3.14)
Using activeresource (2.3.14)
Using coderay (1.0.6)
Using i18n (0.4.2)
Using mysql2 (0.2.18)
Using net-ldap (0.3.1)
Using pg (0.13.2)
Using rails (2.3.14)
Installing ruby-openid (2.1.8)
Installing sqlite3 (1.3.6)
Installing tzinfo (0.3.33)
Using bundler (1.0.21)
Your bundle is complete! It was installed into ./vendor/bundle
- 再度。先ほどbundlerを使ったのでbundle exec
$ bundle exec ruby script\generate redmine_plugin delete_menu
C:/redmine-1.4.0/vendor/bundle/ruby/1.9.1/gems/activesupport-2.3.14/lib/active_support/inflector.rb:3:in `<top (required)>': iconv will be deprecated in the future, use String#encode instead.
NOTE: Gem.source_index is deprecated, use Specification. It will be removed on or after 2011-11-01.
Gem.source_index called from C:/redmine-1.4.0/vendor/bundle/ruby/1.9.1/gems/rails-2.3.14/lib/rails/gem_dependency.rb:21.
NOTE: Dependency.new w/ a regexp is deprecated.
Dependency.new called from C:/redmine-1.4.0/vendor/bundle/ruby/1.9.1/gems/rails-2.3.14/lib/rails_generator/lookup.rb:211
NOTE: Gem.cache is deprecated, use Gem::source_index. It will be removed on or after 2011-08-01.
Gem.cache called from C:/redmine-1.4.0/vendor/bundle/ruby/1.9.1/gems/rails-2.3.14/lib/rails_generator/lookup.rb:212.
NOTE: Gem.source_index is deprecated, use Specification. It will be removed on or after 2011-11-01.
Gem.source_index called from C:/rubies/Ruby-193-p0/lib/ruby/1.9.1/rubygems.rb:1154.
NOTE: Gem::SourceIndex#search is deprecated with no replacement. It will be removed on or after 2011-11-01.
Gem::SourceIndex#search called from C:/redmine-1.4.0/vendor/bundle/ruby/1.9.1/gems/rails-2.3.14/lib/rails/vendor_gem_source_index.rb:119.
NOTE: Gem::SourceIndex#search is deprecated with no replacement. It will be removed on or after 2011-11-01.
Gem::SourceIndex#search called from C:/redmine-1.4.0/vendor/bundle/ruby/1.9.1/gems/rails-2.3.14/lib/rails/vendor_gem_source_index.rb:119.
NOTE: Gem.cache is deprecated, use Gem::source_index. It will be removed on or after 2011-08-01.
Gem.cache called from C:/redmine-1.4.0/vendor/bundle/ruby/1.9.1/gems/rails-2.3.14/lib/rails_generator/lookup.rb:234.
NOTE: Gem.source_index is deprecated, use Specification. It will be removed on or after 2011-11-01.
Gem.source_index called from C:/rubies/Ruby-193-p0/lib/ruby/1.9.1/rubygems.rb:1154.
NOTE: Gem::SourceIndex#each is deprecated with no replacement. It will be removed on or after 2011-11-01.
Gem::SourceIndex#each called from C:/redmine-1.4.0/vendor/bundle/ruby/1.9.1/gems/rails-2.3.14/lib/rails/vendor_gem_source_index.rb:123.
NOTE: Gem::SourceIndex#each is deprecated with no replacement. It will be removed on or after 2011-11-01.
Gem::SourceIndex#each called from C:/redmine-1.4.0/vendor/bundle/ruby/1.9.1/gems/rails-2.3.14/lib/rails/vendor_gem_source_index.rb:124.
create vendor/plugins/redmine_delete_menu/app/controllers
create vendor/plugins/redmine_delete_menu/app/helpers
create vendor/plugins/redmine_delete_menu/app/models
create vendor/plugins/redmine_delete_menu/app/views
create vendor/plugins/redmine_delete_menu/db/migrate
create vendor/plugins/redmine_delete_menu/lib/tasks
create vendor/plugins/redmine_delete_menu/assets/images
create vendor/plugins/redmine_delete_menu/assets/javascripts
create vendor/plugins/redmine_delete_menu/assets/stylesheets
create vendor/plugins/redmine_delete_menu/lang
create vendor/plugins/redmine_delete_menu/config/locales
create vendor/plugins/redmine_delete_menu/test
create vendor/plugins/redmine_delete_menu/README.rdoc
create vendor/plugins/redmine_delete_menu/init.rb
create vendor/plugins/redmine_delete_menu/config/locales/en.yml
create vendor/plugins/redmine_delete_menu/test/test_helper.rb
- deprecateがやまほど出たけど、一応スケルトンは作れたみたい。で、init.rbを編集。ここは同じ
Redmine::Plugin.register :redmine_delete_menu do
...
+ delete_menu_item :top_menu, :help
end
- で、起動。ここでもbundle exec
$ bundle exec ruby script\server -e production
C:/redmine-1.4.0/vendor/bundle/ruby/1.9.1/gems/activesupport-2.3.14/lib/active_support/inflector.rb:3:in `<top (required)>': iconv will be deprecated in the future, use String#encode instead.
=> Booting WEBrick
=> Rails 2.3.14 application starting on http://0.0.0.0:3000
NOTE: Gem.source_index is deprecated, use Specification. It will be removed on or after 2011-11-01.
Gem.source_index called from C:/redmine-1.4.0/vendor/bundle/ruby/1.9.1/gems/rails-2.3.14/lib/rails/gem_dependency.rb:21.
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2012-05-28 20:03:32] INFO WEBrick 1.3.1
[2012-05-28 20:03:32] INFO ruby 1.9.3 (2011-10-30) [i386-mingw32]
[2012-05-28 20:03:32] INFO WEBrick::HTTPServer#start: pid=3248 port=3000
1.4台でもいけた!
実際にプラグインを入れてみる(Jenkins)
Task Scanner Pluginを入れてみよう。
環境
- Windows XP
- Jenkins 1.450
手順
- Jenkinsの管理 => プラグインの管理 => 利用可能タブ => Task Scanner Pluginをチェックしインストール
- Static Code Analysis Plug-insも同時にDLされるみたい
- 再起動
- Jenkinsプロジェクト => 設定 => ビルド後の処理 => 未解決タスクの集計[1]にチェック
- 集計対象: source/*.rst
- 今回はSphinxのドキュメントソース内のTODOを拾うので
- 集計対象外: source/*.py
- conf.pyなどは除外する
- タスクタグ 優先度 Normal: //TODO
- ドキュメント内の//TODOを探してもらう。優先度は適当
- 高度な設定を開きデフォルトのエンコーディング: UTF-8
- 集計対象: source/*.rst
- 保存してビルド
- 一度ビルドするとJenkinsプロジェクトのメニューに【未解決タスク】のリンクが表示される
- 今回設定した//TODOがまとめられてる!
- 後、//TODO hogehogeとキーワードの後ろに何か書いておくとメッセージとしてどんなTODOなのかも表示される!
[1] ローカライズされてた