タグ: Redmine

shinagawa.redmine 第2回勉強会

日付:2012/01/21

URL: 第二回勉強会 – shinagawa.redmine – Redmine

場所:IPA様会議室

shinagawa.redmine 第二回勉強会 – Togetter



数千人が利用する楽天redmineの過去と未来

ご本人によるコメント付きスライド↓
数千人が利用する楽天Redmineの過去と未来 #47redmine | 世界

2008年に導入

最初は1人、そして2~3人
10人で使ったら失敗して当時は全く相手にされなかった

2009年4月

空いている仮想サーバにインストールして利用(mem 516M)
64ユーザ
たまに固まるのでcronで再起動していた

プロジェクトを細かくすると、重みのかけかたで放置されやすくなるので、プロジェクトを分けすぎるのはダメと気づく

進捗が見えるプラグインを作成・導入した

redmineの活用、進捗の見える化、ユーザが拡大

2009年9月

ユーザ数拡大によりWEBRickの限界が見える
340ユーザ

問い合わせをredmineで管理するようにした。
具体的な利用方法はwikiに書いた(wikiはredmineのではなく、別のを利用)

細かい工数入力を実践→めんどくさいので半年でやめた
そのかわり成果を見ることに(どれだけチケットを消化したか)
バーンダウンチャートプラグイン
パーキングロットチャートプラグイン → 社内でも成功したプラグイン

プラグインは見てすぐわかるシンプルさが重要

2010年

告知しなくてもクチコミで広がっていった。結果、登録ユーザが1000人超える(所属エンジニアの60%を占める)

redmineのバージョンアップをこまめに行った。

仮想サーバでは処理しきれなくなったため、リアルサーバに切り替え
WEBサーバの2台化やSVNの負荷が問題になり、SVNサーバのスケーリングを行う

1つのプラグインで全員を止めてしまう事象が発生する
(プラグイン内でのSQLによっては固まってしまう。そのプラグインを見ないようにすると正常に動く)
全文検索を使うのは厳しくなった

最近

アジャイルコーチとなって教えることとなり、redmineは問い合わせ管理ぐらいしか使わなくなった。

タスクボード+バーンダウンチャート(手集計)+日めくりカレンダーのアナログツールを使用

タスクボードの写真を撮って記録。ローコストで手軽

徹底的に見える化を行うこと

2011/秋頃:4,100ユーザ、160,000チケット、2,500プロジェクト
redmineがあると使ってしまうが、本当に必要かを考えるようにした

予想以上に広まった結果、無茶な利用をしないようにルールを決めて利用することに

融通が聞かないようになる

独自redmineが使われるように

「個人の対話が重要」

redmineでも日本語全文検索

利用目的

チケットドリブンのサポートツールとして利用

OSS版ITILツールとして

商用でチケットドリブン型ツールもあるが、高い、技術が古い、機能が多すぎる

運用現場に導入した→状況の共有に効果がでた

欲が出て情報の共有をしたくなった
「ドキュメントの中のどこに書いてあった」を知りたい

→文書管理と紐付けたい→システムを統合へ

変更内容

DMSFの修正
Hyper Estraierを使用するようにした

linuxでやったら簡単に実装できたが、Microsoft Officeのドキュメントが扱えない
→OpenOfficeサーバで抽出させることに

少し遅くてもいいからインデックスなしでの検索がほしい

今回の方法は、大規模化やセキュリティに課題あり

プラグイン開発ガイド

プラグインタイプ

  • wikiマクロの追加
  • redmineの機能拡張
  • 管理データの追加

ALMinium

Redmineと便利なプラグインをまとめたインストーラー

3種の神器(yum, Git, ALMiniumのインストーラー)でらくらくインストール

LT

redmineチケットにおけるプロジェクト火消し戦略

ケーススタディ

  • 終了済みバグ、タスクが大量に残る
  • 優先度や期日が有名無実化
  • チケットのドキュメントがGoogle Docsなどで併用して存在する
  • 次から次へとタスクが追加
  • 大量のチケットが同じ担当者

対策

「トリアージ

納期を遵守するために、作業に優先・非優先の観点で順位付けをおこなう
機能・人員・時間・品質を調整

「効率化」

チケットの初期化時

  • ツールをRedmine一本化
  • 棚卸と全チケット化
  • 最小作業時間5分以上かかるものをチケット化
  • 1日以上のものは分割
  • 担当者名を「社名 未担当」という形で割り当てる
  • 優先度、開始日、期日を設定する
  • 優先度と未担当のカスタムクエリを追加して、一覧化

チケット運用時

  • チケット管理者を立てる
  • 理想は専任
  • チケットフローを簡略化
    完了時コメントはテンプレ化
    担当者が作業を完了したら管理者に担当を変更する。その後のステータスの処理などを管理者が一手に引き受ける

一番大事なのはモチベーション

redmineのPDF文字化け問題とその修正

資料参照

Redmine Graph Activitiesプラグイン

meumacha/redmine_graph_activities – GitHub

誰が、いつ(時間、曜日)、何回コミットや変更されたかを棒グラフで表示するプラグイン

時間別、曜日別のコミット量を視覚化することで、作業担当者の行動特性がわかるようになる(朝方、夜型など)

○○からのメッセージをお読みください。(仮)

管理者から利用者に伝えたいこと(バージョンアップ・メンテナンス)を周知させたかった

  • 専用ページを作ったが、見に来ないといけない
  • メールを送ってみたが、見てくれない

バナー表示ができるプラグインを作成した

System Notification – r-labs – Redmine

CandyCaneについて

Downloads for yandod’s candycane – GitHub

PHP製Redmine

  • PHPなので、だいたいどこでも動く
  • PHPなので、プラグイン導入時に再起動の必要がない

WordPressを参考に

  • インストール 1分以内
  • 管理ページからプラグインの管理(追加・削除)ができる
広告

RedmineとSubversion・Git・Mercurialのリポジトリ(ともに同じCentOSサーバ上)の連携(リポジトリの作成とアクセス・認証)

Redmine上からSubversion,Git,Mercurialのリポジトリ作成ができ、公開したリポジトリにプロジェクトに所属したユーザであれば、Redmineのユーザアカウントでアクセスできるようになります。

Subversion,GitなどのツールやRedmineとアジャイル開発、継続的インテグレーションに便利な各種プラグインに加え、今回の連携設定などをまとめてインストールできるALMiniumというものがあります。

前提

  • OSがCentOS
  • Apacheをインストール済み
    (# yum install httpd)
  • Apacheの実行ユーザ名とグループ名はapache
  • Subversionとmod_dav_svnモジュールがインストール済み
    (# yum install subversion mod_dav_svn)
  • Gitインストール済み(# yum install git)
  • Mercurialインストール済み(# yum install mercurial)
  • Redmineをインストール済み
    (http://blog.redmine.jp/articles/redmine-1_2-installation_centos/)
  • redmineのDBはMySQLで同じサーバで稼働
  • redmineのインストールディレクトリを$REDMINE_ROOTとする
  • SVNリポジトリを格納する親ディレクトリを/var/www/repos/svnとする
  • GITリポジトリを格納する親ディレクトリを/var/www/repos/gitとする
  • Mercurial(Hg)リポジトリを格納する親ディレクトリを/var/www/repos/hgとする
  • http://example.jp/repos/svnがSVNリポジトリのURLとする
  • http://example.jp/repos/gitがGITリポジトリのURLとする
  • http://example.jp/repos/hgがHgリポジトリのURLとする

1.リポジトリの親フォルダの作成

# mkdir -p /var/www/repos/{svn,git,hg}
# chown -R apache /var/www/repos

2.SCM Repository Creation pluginのインストール

RedmineからSubversion・Git・Mercurialのリポジトリの作成ができるプラグイン

a). ダウンロード

http://projects.andriylesyuk.com/projects/redmine-svn/wiki/Installの横にあるダウンロードリンクからredmine_scm-0.2.0.tar.bz2をダウンロード

b). インストール

解凍としてできたredmine_scmをフォルダ丸ごと$REDMINE_ROOT/vendor/pluginsに移動

c). DBマイグレーション

$ rake db:migrate:plugins RAILS_ENV=production

d). プラグインの設定ファイルの追加

$cp $REDMINE_ROOT/vendor/plugins/redmine_scm/config/scm.yml $REDMINE_ROOT/config/scm.yml
$vi $REDMINE_ROOT/config/scm.yml

production:
  auto_create: false
  deny_delete: true
  svn:
    path: /var/www/repos/svn
    svnadmin: /usr/bin/svnadmin
    url: http://example.jp/repos/svn
  git:
    path: /var/www/repos/git
    git: /usr/bin/git
    options: --bare
    url: http://example.jp/repos/git
    update_server_info: true
    git_ext: true
  mercurial:
    path: /var/www/repos/hg
    hg: /usr/bin/hg
    url: http://example.jp/repos/hg

development:

※不要なSCM部分はカットする
deny_delete
リポジトリの削除を禁止するか
falseに設定するとプロジェクトの「設定」→「リポジトリ」に「削除」のリンクが現れる
削除するとリポジトリ情報リポジトリ自体も削除される
path
リポジトリの親ディレクトリ
この下に各プロジェクトのリポジトリが作成される
url
HTTPでアクセスする際のURLプレフィックス
リポジトリを作成した後、プロジェクトの「設定」→「リポジトリ」の画面にURLが表示される

e). Redmine再起動

# service httpd graceful
(Passengerを使用しているのでApacheの再起動で代用)

f). 「管理」→「プラグイン」「SCM Creator」が追加されているのを確認

g). 所属しているプロジェクト→設定→リポジトリと移動し、リポジトリを作成してみる

「バージョン管理システム」から「Subversion」を選択すると、
URLに親フォルダ+プロジェクト識別子が入力された状態になる
ログイン、パスワードは空のまま「Create new repository」を押すとURLの場所にリポジトリが作成される

3.各リポジトリのHTTPアクセスとRedmineの認証情報の連携

参考:http://www.redmine.org/projects/redmine/wiki/Repositories_access_control_with_apache_mod_dav_svn_and_mod_perl

a). 必要パッケージのインストール

# yum install mod_perl perl-DBI perl-Digest-SHA1 perl-DBD-MySQL

b). Redmine.pmにパッチを当てる(Git用)

SubversionのリポジトリにHTTPでアクセスする際、Redmineに付属しているRedmine.pmを使用して認証を行います。
Redmine.pmはSubversion用のものなので、http://www.redmine.org/issues/4905にあるパッチを当てることでGitリポジトリにHTTPでアクセスできるようになります。

# cd $REDMINE_ROOT/extra/
# cp Redmine.pm Redmine.pm.orig (バックアップのため)
# wget "http://www.redmine.org/attachments/download/5989/0001-merged-LeeF-s-patch-with-Michael-Fox-s-security-fix-redminetrunk.patch" (上記URLの最新のパッチ)
# patch Redmine.pm < 0001-merged-LeeF-s-patch-with-Michael-Fox-s-security-fix-redminetrunk.patch

c). Redmine.pmをperlのインクルードパスが通っている場所に設置する

設置例:

  • /etc/httpdにApacheディレクトリを作成し、その中にAuthnディレクトリを作成しその中にRedmine.pmを入れる
  • /usr/lib/perl5/Apache/Authn/にRedmine.pmを入れる(ディレクトリがない場合は作成する)

d). hgweb.cgiの設定(Mercurial用)

#cp /usr/share/doc/mercurial-x.x.x/hgweb.cgi /var/www/repos/hg/  (x.x.xはインストールされたmercurialのバージョンです。)

#vi /var/www/repos/hg/hgweb.config
[paths]
/=/var/www/repos/hg/**

[web]
allow_push = *
allowbz2 = yes
allowgz = yes
allowzip = yes

#vi /var/www/repos/hg/hgweb.cgi
7行目
config = "/path/to/repo/or/config"
↓
config = "hgweb.config"

e). Apacheの設定

# vi /etc/httpd/conf.d/redmine.conf
  PerlLoadModule Apache::Authn::Redmine

  # Subversion
  <Location /repos/svn>
    DAV svn
    SVNParentPath "/var/www/repos/svn"

    AuthType Basic
    AuthName "Redmine SVN Repository"
    Require valid-user

    PerlAccessHandler Apache::Authn::Redmine::access_handler
    PerlAuthenHandler Apache::Authn::Redmine::authen_handler

    ## for mysql
    RedmineDSN "DBI:mysql:database=redmine_db;host=localhost"
    RedmineDbUser "redmine_user"
    RedmineDbPass "redmine_pass"
  </Location>

  # Git
  SetEnv GIT_PROJECT_ROOT /var/www/repos/git
  SetEnv GIT_HTTP_EXPORT_ALL
  ScriptAlias /repos/git/ /usr/libexec/git-core/git-http-backend/
  <Location /repos/git>
    AuthType Basic
    AuthName "Redmine Git Repository"
    Require valid-user

    PerlAccessHandler Apache::Authn::Redmine::access_handler
    PerlAuthenHandler Apache::Authn::Redmine::authen_handler

    RedmineDSN "DBI:mysql:database=redmine_db;host=localhost"
    RedmineDbUser "redmine_user"
    RedmineDbPass "redmine_pass"
    RedmineGitSmartHttp yes
  </Location>

  # Mercurial
  ScriptAliasMatch ^/repos/hg(.*)  /var/www/repos/hg/hgweb.cgi/$1
  <Location /repos/hg>
    AuthType Basic
    AuthName "Redmine Mercurial Repository"
    Require valid-user

    PerlAccessHandler Apache::Authn::Redmine::access_handler
    PerlAuthenHandler Apache::Authn::Redmine::authen_handler
    RedmineDSN "DBI:mysql:database=redmine_db;host=localhost"
    RedmineDbUser "redmine_user"
    RedmineDbPass "redmine_pass"
  </Location>

データベース名、データベースアクセスユーザ名・パスワードは適宜変更して、Apache再起動

# service httpd configtest
# service httpd graceful

f). 認証が有効になっているか実際にアクセスする

  • svn ls / git clone / hg clone
  • TortoiseSVN・TortoiseGit・TortoiseHgなどを使用してアクセス

Redmineユーザ名とパスワードでアクセスできるか確認する

shinagawa.redmine 勉強会 第一回

URL: shinagawa.redmine – 第一回勉強会 – Redmine

場所:IPA様 会議室

日時:2011/09/08 19:00 to 21:00

Toggetter:第1回品川Redmine勉強会 – Togetter

1.障害管理からチケット駆動開発へ~ソフトウェア開発の3種の神器 (@akipii)

【公開】第1回品川redmine勉強会の発表資料「障害管理からチケット駆動開発へ~ソフトウェア開発の3種の神器」 #47redmine: プログラマの思索

Excelによる障害管理の課題

  • バグ情報が散在しやすい
  • バグ修正と検証のワークフローが複雑
  • リリース管理が大変

BTSの特徴

  • 障害管理のためのシステム
  • バグ情報をチケットで一元管理
  • チケットのステータスでワークフロー制御
  • 終了チケットをリリース履歴として残せる

BTSからITS(課題管理システム)

  • 障害だけでなく、課題や要望をチケットにする
  • チケット駆動開発が誕生
  • ワークフロー管理をソフトウェア開発全般に拡張
  • トレーサビリティでの変更管理をサポート
  • ツール連携で新しい運用方法を見出す
    →ITS+Wiki+SCM+CI

アジャイル開発でのチケット駆動開発

  • XPのタスクカードがチケット
  • XPのタスクボードがチケット一覧
  • XPのイテレーションがITSバージョン

2.RedmineのSCM機能(@marutosijp)

marutosi / redmine-shinagawa-20110908 / overview — Bitbucket

  • リポジトリブラウザ
  • タグやブランチ
  • ソースツリー
  • ファイル単位での履歴 など
  • 統計グラフ
  • チケットの関連付け

内部構造

  • SCMによらず内部データベーススキーマーは一緒
    →リビジョンをすべてDBに保管する
  • SCMにsubversionのリモートを採用していると少し遅い
    →ツリー表現処理にsvn listを使っているため
  • redmineのSCMにおいてgitよりmercurialが優位な点
    • リビジョン番号が存在
    • リビジョン番号の並び順が保証
      →内部的に取り込みやすいGitのブランチはリビジョンへのポインタだから、リビジョン間に何があったか表示するのが大変
    • Redmine 1.2から改善を行い早くした

Redmine開発での問題点

  • コントリビューター・ コミッタ不足
  • チーム内で英語に少し不慣れ

3.Redmineの実業務における活用事例紹介(@yohhatu)

アンチパターンあり

事例1

背景

  • メンバー全員初Redmine
  • Redmineの管理権限がもらえなかった
  • クライアントとの信頼関係あり
  • これまでJava開発をメインでしていたが心機一転Ruby On Railsを採用
  • イテレーション単位での反復開発

やったこと

  • WBSの1タスクを1チケットにした
  • ガントチャートと併用
  • カスタムクエリを工夫(前日に発行されたチケット一覧、未対応バグ一覧 など)

よかったこと

  • リーダーが楽しそう
  • 今やることに集中できた

課題

  • チケットの粒度が大きかった

改善点

  • チケット粒度を細かく(2.5〜4時間で1チケットを1日3個 消化する)

事例2

背景

  • 前回と同じメンバー
  • 納期が短い
  • リーダーを担当した

やったこと

  • 全面Redmine、ほぼチケット駆動開発
  • ガントチャートはマイルストーンのみ
  • イテレーションごとに動くものを見せた

よかったこと

  • メンバーがチケットを取るようになった
    (メンバーがチケットを書く、そしてそれをアサインする)
  • 余計な管理作業がなかったので実装に集中できた
    (進捗などはRedmineでわかるから)
  • 追加仕様がなく クライアントから高評価だった

課題

  • マネージャーからマイルストーンの提出を求められた
    →Redmineを見せてとにかく説明した

事例3

背景

  • 社内向けシステム
  • メンバー10人
  • 経験豊富なメンバー
  • 社内システムなので新しいものを挑戦できる環境
  • Redmineの管理権限が使えた

やったこと

  • TiDD(No Ticket, No Commit)の採用
  • スクラムで開発
  • 3種の神器を利用(@akipiiさんの発表参照)

よかったこと

  • トレースがしやすくなった
  • プラグインの導入で開発が早く、楽しくなった
    Code Review / Burndown Chart / WorkTime / Redmine Graph Activities
  • 3種の神器の連携は楽

課題

  • 他のチームへの展開が課題

 

Redmineはあくまでツール(銀の弾丸ではない)

 

LT1.Redmineを利用した定量的プロジェクト管理(@yohwada)

発表資料

ITプロジェクトの見える化

暗黙知(KKD:勘と経験と度胸)から形式値へ

見える化ツールの必要性

レポーティング、品質管理、課題管理 etc

 

IPAさんではオープンソースのツールを組み合わせた、定量的プロジェクト管理ツールを年内公開を目標に作成中

 

LT2.うちのRedmineの使い方(@tkusukawa)

 

インフラ運用の現場でRedmineを利用中

  1. wikiに議事録
    履歴で閲覧集計をチェック
  2. 朝会
    worktimeの日程メモを参照しながら
  3. 工数集計
    worktimeでチケット感の工数付け替え集計

LT3.プラグイン開発者への道(@haru_iida)

Redmineとgitosisプラグインでgitosisを使う

前提項目

  • redmineとgitosisは同じサーバで運用する
  • OS: CentOS 5.5
  • ホスト名:example.jp
  • redmineのインストールディレクトリ:/opt/redmine
  • redmineはPassengerでApache上で動いている
  • Apacheユーザ:apache
  • Apacheのホームディレクトリ:/var/www
  • gitosisデータディレクトリ: /var/lib/gitosis
    (gitosisのRPMパッケージインストール時に自動的に作成される)
  • (root)#: サーバ上のrootコマンドプロンプト

gitosisのインストール

EPELをCentOSに追加

(root)# rpm -ivh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
(root)# yum install -y gitosis

/var/lib/gitosisとユーザ gitosisが作成される

gitosisのセットアップ

ユーザapacheのSSHキーの作成

(root)# sudo -H -u apache ssh-keygen

パスフレーズなしで作成。
/var/www/.ssh内に鍵が作成される

gitosisの初期化

(root)# sudo -H -u gitosis gitosis-init < /var/www/.ssh/id_rsa.pub

/var/lib/gitosis内にgitosis関係のファイルが作成される

hookスクリプトのパーミッションチェック

(root)# ls -l /var/lib/gitosis/repositories/gitosis-admin.git/hooks/post-update

755になっているかチェックして、もしなっていなければchmodでセットする。

gitosisの管理用リポジトリがクローンできるか確認

(root)# cd /tmp
(root)# sudo -H -u apache git clone gitosis@localhost:gitosis-admin.git

gitosis-adminリポジトリが作成されていればOK

redmineのgitosisプラグインのインストールと設定

インストール

(root)# cd /opt/redmine
(root)# ruby script/plugin installhttps://github.com/rocket-rentals/redmine-gitosis.git
(root)# cd vendor/plugins/redmine-gitosis/
(root)# rake db:migrate:plugins RAILS_ENV=production
(root)# /sbin/service httpd restart
        ※redmineの再起動の代わりです

gitosis_public_keysというテーブルが追加されます。

gitosisプラグインの設定

プラグイン本体の設定

redmineに管理者ユーザでログインし、「管理」→「プラグイン」→「Redmine Gitosis plugin」→「設定」

  • Gitosis URL: gitosis@localhost:gitosis-admin.git
  • Gitosis identiti file: /var/lig/gitosis/.ssh/id_rsa
  • Base path: /var/lib/gitosis/repositories
  • Developer base URL(s): ssh://gitosis@example.jp/
  • Read-only base URL(s): ssh://gitosis@example.jp/
    ※今回Read-only base URLの設定はしなかったので、とりあえずDeveloper base URLと同じにしています。

redmineから/var/lib/gitosis/repositories/の内容が参照できるようにグループ gitosisにユーザ apacheを加える

(root)# usermod -G gitosis apache

各ユーザ用の設定

redmineにgitosis用のSSH鍵の登録

  1. redmineにログイン
  2. 「個人設定」→「Public keys」→「新しい値」
  3. 「タイトル」に適当な識別名、keyにSSHの公開鍵の内容を貼り付けて、「作成」ボタン押下

redmine上からリポジトリの作成とリポジトリアクセス権の付与

  1. redmineプロジェクトの作成
  2. プロジェクト設定→「メンバー」でメンバーを加える
  3. プロジェクト設定→「リポジトリ」で「バージョン管理システム」で「git」し、「作成」ボタン押下
  4. 「リポジトリ」に移動して新規にリポジトリを作成する場合は「Repository Setup」、既存のリポジトリを登録する場合は「Existing Git Repo」に書かれている手順に従ってリポジトリを作成
  5. 正常に登録できていれば、「リポジトリ」に追加したリポジトリの内容が見られるようになります。