Jenkins,Redmine使いこなし勉強会に参加しました と、ちょっとプラグイン作ってみた #jen_red

[Ruby][イベント][Jenkins][Redmine]Jenkins,Redmine使いこなし勉強会に参加しました と、ちょっとプラグイン作ってみた #jen_red

概要

前半は発表のメモ。後半は実際にプラグイン作ったりインストールしたりのメモ。

Redmineプラグイン活用入門 - @[http://twitter.com/Kokawa_Takashi:title]さん

注意:Redmine開発環境が安定していないので、すぐ陳腐化してしまう事がある!

Redmineにおける問題

  • Redmineの設定で解決
  • 運用で解決
  • ツール自体を拡張して解決
    • プラグインの探し方・おすすめ
    • REST APIを使って外部から
    • プラグインを作る

プラグインの探し方・おすすめ

REST API

  • 自動でチケットを作ったりできる
  • チケット一覧を取得できたり
  • この一連の流れができたらJenkinsに任せる事ができる
    • 期日が間近のチケットのメール通知などもできる

プラグインを作る

  • Redmine1.4 or 2.0が対象(Ruby1.9,Bundler対応している/これ以前はしていない)
  • プラグイン開発環境構築がつらいので

Ruby環境

Redmineインストール

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

環境その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
  • 保存してビルド
  • 一度ビルドするとJenkinsプロジェクトのメニューに【未解決タスク】のリンクが表示される
    • 今回設定した//TODOがまとめられてる!
    • 後、//TODO hogehogeとキーワードの後ろに何か書いておくとメッセージとしてどんなTODOなのかも表示される!

[1] ローカライズされてた

関連記事(この記事の初版より古い記事はリンクがグレーで表示されます)

  1. 2012/07/17 [Ruby] [Windows] [Redmine] Windows版Redmineをサービスに登録してブート時に起動させる(宿題あり)
  2. 2012/06/03 [TDD] [RSpec] [Ruby] [イベント] TDD Boot Camp 大阪 1.0( #tddbc ) に参加しました
  3. 2012/04/28 [Jenkins] [Sphinx] [イベント] BPStudy#57に参加しました #bpstudy
  4. 2012/03/27 [Windows] [Jenkins] [Ruby] simplecovとsimplecov-rcovを使ってJenkinsでカバレッジを確認
  5. 2012/03/20 [Windows] [Jenkins] [Ruby] Windows環境用にrcovをビルドしなおす手順
  6. 2014/08/28 [Sphinx] [Ruby] [イベント] kawasaki.rb #015 でSphinx導入事例の発表をしてきました #kwskrb #sphinxjp
  7. 2014/07/13 [Sphinx] [Ruby] [イベント] kawasaki.rb #013 でSphinx導入事例の発表をしてきました と #011 #012 参加記録 #kwskrb #sphinxjp
  8. 2014/04/01 [Ruby] [Jekyll] [イベント] kawasaki.rb #010 で発表してきました #kwskrb
  9. 2013/08/20 [Ruby] [Rails] [Redmine] Rails3のログ出力にANSIカラーコードを使用しない設定
  10. 2013/08/09 [Ruby] [Redmine] [MySql] [StartUp] WindowsにRedmine2.3をインストールする手順と、プラグイン作成用メモ
  11. 2013/04/27 [Ruby] [Chef] [イベント] BPStudy#68に参加しました #bpstudy
  12. 2011/12/15 [Ruby] [Solaris] [Redmine] RedmineとApacheを連携させるPassengerをインストールできなかった
  13. 2011/12/05 [Ruby] [Redmine] RedmineでプラグインインストールしたらTemplateErrorが出た
  14. 2011/09/07 [Ruby] [Redmine] [SQLite3] [Windows] Redmineのプラグイン作成のための備忘録と、時々SQLite3
  15. 2011/05/01 [Ruby] [Redmine] [Windows] Redmineインストール備忘録(Windows)