secretbase.log

.NET/C#/Pythonなど

RedmineとSCMの連携を失敗しないうまいやり方

Redmine Advent Calendar jp 2011 の5日目の記事になります。SubversionなどのSCMとのキーワード連携を失敗しないようにする方法と失敗した場合の復旧方法についてのTipsです。

Redmineを社内展開するぞと意気込む

今年の4月から社内インフラの標準ツールとして、RedmineSubversionのエンジニア教育を開催してきました。
教育内容は基礎的な知識ですが、座学だけでは身につかないので、ワークショップという形式をとってチケットをトリガにしSVNにコミットする作業をペアですることにしました。いわゆるチケット駆動開発のごく一部を体験することに力を入れています。
受講者は、1回あたり10人程度で、5回ほど実施する中でいくつか挙がった質問がありました。

チケット駆動開発をすすめる中で...

チケット駆動開発を実践する場合、SubversionなどSCMにコミットする際のコミットログにキーワードとチケット番号を記載することが基本です。
しかし、よくチケット番号を間違えたり、連携キーワードを間違えたりし残念な結果になることがあり、復旧方法を聞かれたりすることがあります。
まず間違えない方法と、間違えた場合に修正する方法について、いくつかご紹介していきたいと思います。

(1) RedmineとSCMの連携をうまくするために

まず、間違えないようにする、というのは大事です。
SCMのクライアントに Tortoise を使っている場合は、下記プラグインを使うことでチケット一覧から選択することができるようになります。
Tortoise SVN/GIT/hg の Redmineプラグイン(TurtleMine)
http://code.google.com/p/redmine-projects/

f:id:cointoss1973:20111205221251p:image
チケット番号を選んで、OKボタンを押します。

f:id:cointoss1973:20111205221252p:image
選んだチケット番号が入っています。基本的にこれで選択すれば間違えないとは思いますが、設定が面倒でサボってたりなんだりでやっぱり間違えます。

(2) チケット連携の間違いを防止するには、

コミット時にコミットログが正しくなければ弾いてしまえばいいのではという考えです。
サーバ側の pre-commit hook の設定が必要だと思い込んでいましたが、サーバ管理者巻き込んで設定してもらうのは面倒だなぁ。がちがちの運用にするのも必ずしもよくないしなぁと思っていたら、Tortoise側でチェックすることも可能であると教えてもらいました。ディレクトリ毎の設定ができるので必要なプロジェクトやモジュール単位で運用可能です。

TortoiseSVNSubversion のプロパティページで編集をクリックすると設定できます。
f:id:cointoss1973:20111205221253p:image
f:id:cointoss1973:20111205221254p:image

キーワード連携ができていない場合(キーワードはここでは Issue と refs と reslves) を入れない場合、下記警告も出ます。
f:id:cointoss1973:20111205221255p:image
コミットすることもできますので緩やかな導入も期待できます。

また、TortoiseSVN側からバグIDに対してBTSへ対してリンクを張ることができるようですが、メッセージと正規表現が排他的な設定になっているようで、正規表現を使った場合、リンク機能をうまく使うことができませんでした。
両方同時に使えると便利ですね。


(3) チケットからチェンジセットへの参照を行うようにする普通のやり方

それでもチケット番号を間違えてしまった場合は、チケット側には、r459 などとリビジョン番号を記載することでお茶を濁してました。
f:id:cointoss1973:20111205223000p:image

とりあえず、チケット側からはチェンジセットを追うことができますが、リポジトリ側から追うことはできない点は諦めざるを得ませんでした....この間までは。


(4) 最近リリースされたプラグインを使ってチケット連携を修正することもできます

人間誰しも間違って成長するものなのです...と悟りを開きかけたところに、
関連付けを変更するプラグインがリリースされていましたよ。

Commit Relation Editor
http://www.r-labs.org/projects/r-labs/wiki/Commit_Relation_Editor

リポジトリ側から変更することができます。やり直しがきくようになったんですね。
チケット側の連携(右下の関係しているリビジョン)にチェンジセットが表示されるようになります。
Redmine 1.2.0 以降で使えます。

こんな感じでチケットを追加でチケット番号を入れることができます。
f:id:cointoss1973:20111205222117p:image

最後に

いかがでしたか?
RedmineとSCMが連携することでコミットログに書ききれない情報を容易に取得することができます。またさらにJenkinsも連携し継続的な統合を行うことでソフトウェア開発全般のライフサイクルをRedmineを中心に構築することができます。このあたりの話はまたどなたか掲載されるかもしれませんね。

次は @ さんです。よろしくお願いします。