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

Tags: [ Ruby ] [ イベント ] [ Jenkins ] [ Redmine ] Published: 2012/05/28

概要

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

Redmineプラグイン活用入門 - @Kokawa Takashi (Kokawa_Takashi)さんはTwitterを使っていますさん

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

Redmineにおける問題

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

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

  • r-labs
  • Plugins - Redmine
  • 一つだけおすすめを… Wiki Extensions Plugin
    • オートプレビュー
    • 任意のページをメニューに
    • 任意のページを埋め込み 等々…
  • 他のおすすめ
    • CodeRevirew
    • Backlogs
    • TimeTracker

REST API

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

プラグインを作る

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

Ruby環境

  • WindowsならRubyInstaller + DevKit
  • MacならRVM

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プラグイン活用入門- @さぼてん(さぼ福)しんざき 佐藤太一 (cactusman)さんはTwitterを使っていますさん

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: ローカライズされてた

blog comments powered by Disqus

Author: kk_Ataka / Powered by Jekyll on GitHub Pages