LoginSignup
9
9

More than 5 years have passed since last update.

Trac-GitHub連携プラグインを使ってみる

Last updated at Posted at 2014-02-19

チームで以前からTracを利用してます。Tracに色々なプラグインを入れて便利に使っているのですが、ソース管理をGitに移行した後、TracのBrowse Sourceが遅いといった問題にあったり、GitHubのpull requestを利用したコードレビューっていいよね、と言ったGitHubの良さを見てきて、部分的にGitHubに移行できないか調査しました。
探してみると、なんとtrac-githubプラグインというTracとGitHubを連携するプラグインを見つけました。ところがこのプラグイン、ちょっと癖のあるプラグインのため、環境構築等をまとめました。djangoプロジェクトのTracで使われているので、実績はあるといえるでしょう。

リポジトリ

このプラグインでできること

  • GitHubに作成したリポジトリにpushすると、Tracのチケットとコミットを紐付けられる
  • チケットに紐付いたコミットのリンクをクリックすると、GitHubの該当コミットにジャンプする

と言ったことを実現します。

動作の流れ

  1. ユーザーがGitHubにpushする
  2. GitHubはPushされた内容をWebHookを使ってTracに通知する
  3. Tracは通知を受け取り、GitHubから変更分をupdateする
  4. 変更分をupdateで受け取った時、CommitHookを起動してチケットにコミットを紐付ける

という流れです。結構シンプルでしょ?

環境構築

システム要件

  • Trac 0.12以上
  • TracGitPlugin(Trac 1.0.0以降であれば同梱されています。)

プラグインのインストール

プラグインのインストールには大きく分けて2つやり方があります。

eggを作成し、インストール

$ git clone https://github.com/aaugustin/trac-github.git
$ python setup.py bdist_egg

すると、dist/以下にtrac_github-XXX-pyYYY.eggというファイルが出来上がります。(XXXはプラグインのバージョン、YYYはPythonのバージョンです。)これを$TRAC_PROJECT/pluginsの下にコピーしてください。

どうでもいいんですが、Pythonのバージョンごとにegg作らないといけないの、なんとかならないでしょうか…。Javaって後方互換性は担保されているので、そういうところは悪くないですよね。

pythonのライブラリとしてインストール

pipを使ってインストールできますが、システムのパスになるため、あまりオススメできないです。

pipを使う
$ sudo pip install trac-github

リポジトリの準備

GitHubからTracと連携させたいリポジトリを予めmirrorしておきます。

$ git clone --mirror git://github.com/<user>/<project>.git

このリポジトリはTracから操作されます。Tracから操作できるように、下記のようにTracの実行ユーザーに所有者を変えておきましょう。

$ chown -R www-data:www-data <project>.git

プラグインの設定

trac.iniの修正

[components]

重要なことですが、このプラグイン、標準のChangesetModule等と競合します。そのため、このプラグインを有効にするには、下記のようにtrac.iniの[components]を記述します。

trac.ini
[components]
trac.versioncontrol.web_ui.browser.BrowserModule = disabled
trac.versioncontrol.web_ui.changeset.ChangesetModule = disabled
trac.versioncontrol.web_ui.log.LogModule = disabled
tracext.github.* = enabled
tracopt.ticket.commit_updater.* = enabled
tracopt.versioncontrol.git.* = enabled

え?BrowserModuleを無効にしないといけないの?と思ったそこのあなた。実はBrowserModuleは併用可能です。ただ、チケットからSubversionのリポジトリにリンクを貼っていた場合、それは無効になってしまうので、注意が必要です。

インストールができると/githubというエンドポイントが作成され、アクセスすると下記のように表示されます。

Endpoint is ready to accept GitHub notifications.

Tracで管理したいリポジトリが単一か、複数かでtrac.iniの設定が異なります。それぞれについて書いていきます。

単一リポジトリの場合

[github]

[github]では、GitHubのリポジトリの設定を行います。下記のようにGitHub上のリポジトリを指定すればOK

trac.ini
[github]
repository = <user>/<project>

Trac側が変更を受け取るブランチを指定したい場合は下記のように指定しましょう。

trac.ini
[github]
repository = <user>/<project>
branches = master stable/*
[trac]

通常の単一リポジトリと同様、[trac]にリポジトリのパスを記述します。

trac.ini
[trac]
repository_dir = /home/trac/<project>.git
repository_type = git

マルチリポジトリの場合

[github]

[github]では同様にリポジトリの設定を行います。下記のようにGitHub上のリポジトリを指定しましょう。

trac.ini
[github]
repository = <user>/<project>
<reponame>.repository = <user>/<project>
<reponame>.branches = master stable/*

[repositories]

こちらもマルチリポジトリと同様、[repositories]にリポジトリのパスを記述します。

trac.ini
[repositories]
<reponame>.dir = /home/trac/<project>.git
<reponame>.type = git
<reponame>.description = description
.alias = default
default.dir = /home/trac/<default>
default.type = svn

こんな感じでSubversionのリポジトリも参照可能です。

GitHubのリポジトリにWebHookを追加

GitHubにpushした時に、Tracの更新ができるよう、WebHookを追加します。WebHookのエンドポイントは、追加された/githubです。マルチリポジトリの時は、リポジトリ名を含めてください。/github/<reponame>という感じですね!

ということで、これでTracとGitHubの連携の設定は終わり。お疲れ様でした!

9
9
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9