Subversion, Git, Redmine, Hudson – 今考えている連携

2月 21st, 2010 by tune Leave a reply »


これからが本番、検索エンジンから来た方は先にSubversion, Git, Redmine, Hudson – 現状の連携 » tune webを読むことをおすすめします。上記が週末考えていた「こういう連携なら今の問題点を解消できるかな」と思えるフローです。「こうしたほうがいいよ」とかコメントありましたらお待ちしています。

1番のポイントはバージョン管理システムとしてGitを中心に据えました。社内はSubversionで統一するという規則があるので残すとして、開発チーム内ではgit svnを使ってGit化し、Subversionを直接触らないようにします。協力会社はSubversion縛りが無いのでGitで統一してもらいます。これまでは差分ファイルを送り合っていましたが、Gitを使えばパッチをうまく作り、修正単位でパッチファイルをやり取りすることが出来るでしょう。これまでは複数の修正がまとめて送られてきてましたが、パッチ単位ならレビューもやりやすく、「こうした方がいい」とか「こうして欲しい」というやりとりもやりやすくなります。

リポジトリがプロジェクト専用になるので、フックスクリプトも仕掛けやすくなります。現状は「空メッセージのコミットは禁止」程度の緩めのものですが、コミットメッセージに Issue ID を含むことを強制させる Git のフックスクリプトを書きました|SNS構築の手嶋屋を参考にすればRedmineのチケットが無いコミットは禁止できます。これで闇コミットがなくなるはず。

さらにGitを使えば「歴史を書き換えて」テストが通らないコミットをなかった事にも出来るはずです。コミット前にテストをする機能がTeamCityにはありますが、Hudsonにはありません。[#HUDSON-1682] Pre-tested commit feature – Hudson JIRAとして要望が挙げられていますが実現はまだ先になるでしょう。HudsonのGit Pluginのページにpushされた変更をテストして、成功したらmaster/stableにマージする設定手順がありましたが、リリースブランチを持ったときにも同じように出来るかは不明です。

というのをtwitterにつぶやいていたところ、@bleisさんと@masanobuimaiさんから情報をもらえました。Gitのフックスクリプトですが

  1. pre-receiveでpush前の状態をタグ付けする設定を追加
  2. post-receiveでHudsonの複数ジョブをキックして起動。
    1. テスト結果を取得して全て成功したらタグを消してgit svn dcommitを実行
    2. 1つでも失敗していたらpre-receiveでタグ付けしたバージョンに戻してpushをなかった事にする。

とすることでいけそうです。Hudsonのジョブ実行結果を知る方法は複数あると@masanobuimaiさんに教えてもらったのがPlugins – hudson – Hudson Wikiのページです。プラグイン無しでもリモートAPIを使っても出来るのかもしれません。
自前でフックスクリプトを用意する必要がありますが、出来ないことはなさそうです。
post-receiveでのテストに多少の時間がかかることを踏まえ、Redmineで参照するリポジトリはGitではなくSubversionにするのが良さそうです。

あとはRedmineのメール経由のチケット登録機能を有効にして、HudsonのナイトリーテストでこけたらカスタマイズしたメールをRedmine指定のアドレスに送ればOKですね。上の絵には「静的解析とメトリクス集計」が入ってますが、これは内製ツールです。リポジトリを集中管理してもらえるとこういうこともやってもらいやすくなりますね。

上記構成に3月中に取り組む予定です。うまく行くといいんだけど。

Advertisement

6 comments

  1. mootoh より:

    とても自分のいまいる状況と似ています…

    自分のところも、 Git で外の協力組織とソース管理をしています。さいしょに協力組織用のブランチをきって、それを bundle にしたものを渡し、以降はパッチをメールしあうという流れで一年やってきました。これはなかなかうまくいっています。

    いまの問題は、こちらのイントラにある Redmine を外から参照してもらえないことですね。埒があかないので、外にサーバたてるしかないか… と考えているところです。

    そのあたり、どのように進めていかれるのか、興味があります。

  2. nobiinu_and より:

    手前味噌なんですが、Redmine 上の Hudson プラグインを作成してます。
    プラグインの機能の1つに、Redmineの活動ページに履歴を表示するというものがあります。

    よろしければ、使ってみてください。

    http://www.r-labs.org/projects/r-labs/wiki/Hudson

  3. tune より:

    Re: mootoh
    Redmineが社外から見れない問題はExcelエクスポートで対応しています。
    新規の作業をお願いするのを2〜3ヶ月に1度にしているので対して苦になっていません。

    協力会社用に予めブランチを切って置くというのもいいですね。

    Re: nobiinu_and
    すでに使わせていただいてます。
    Hudsonを直接参照することが多いので活躍の場は少ないのですが・・・

  4. nobiinu_and より:

    > すでに使わせていただいてます。

    どうもありがとうございます。

    > Hudsonを直接参照することが多いので活躍の場は少ないのですが・・・

    実は私のプロジェクトも同じような感じで、
    今のところビルドの状況をちらちら見る程度だったりします。お恥ずかしながら。

Additional comments powered by BackType