BTS.Trac (1.0.51.183) | 2009-07-08 20:03 |
ExcelRedmineAddIn (1.0.1) | 2009-06-15 23:07 |
ExcelTracAddIn (1.2.1) | 2009-06-15 23:09 |
OpenProj (1.4-ja-dev2) | 2009-08-14 09:02 |
ProjectTracAddIn (1.0.0) | 2009-03-14 14:30 |
TaskTrayTrac (2.0β1) | 2009-07-31 00:55 |
TicketImportTemplate (1.0) | 2009-02-03 22:55 |
TracPluginTemplateMaker (0.2) | 2009-10-11 22:59 |
VisualStudioTracAddIn (2.0 β1) | 2009-07-31 00:53 |
少しずつTracのノウハウをまとめて行きたいと思います。
ある程度のユーザ数以上の企業では、LDAPもしくはActive Directoryを利用して、社員のユーザ情報を管理していることが多いと思います。このような会社の中でTracをLDAPやActive Directoryと連携させて利用すると、Trac上で煩わしいユーザの管理を行う必要がなくなります。ここでは、LDAP/Active DirectoryとTracを連携させるノウハウを提供します。
LDAP/Active DirectoryのユーザでTracの認証をするには、次のようにします。
ScriptAlias /trac /usr/share/trac/cgi-bin/trac.fcgi <Location "/trac"> AuthType Basic AuthName "Enter your ID" AuthBasicProvider ldap Order Allow,Deny Allow from All AuthLDAPBindDN "CN=okamototk,OU=person,DC=trac,DC=example,DC=com" AuthLDAPBindPassword "BindDNで指定したユーザのパスワード" # LDAPのURLを指定Active Directoryのアカウント名にしたい場合はsAMAccountNameを利用 AuthLDAPURL "ldap://<LDAPのサーバ>/?uid?sub?" Require ldap-attribute objectClass=person </Location>Active DirectoryやLDAPの構造によっては、アカウントIDとして社員番号などのIDを利用し、メールアドレス等で利用するユーザ識別子が別の属性に格納していることがあります。例えば、わたしの会社の例では、Active DirectoryのアカウントID(sAMAccountName属性)として、4738292というIDが振られており、ユーザ識別子のokamototkはCN属性に格納されています。通常、社内システムにログインする際には、4738292のIDを利用しているので、Tracの認証にもそちらのIDを利用したくなります。しかし、Trac認証後のユーザIDが4738292ではTrac上でだれが操作したのか分らないので、Trac上ではokamototkをユーザIDとして利用したいでしょう。そのような場合は、次のようにAuthLDAPRemoteUserAttributeを利用します。
ScriptAlias /trac /usr/share/trac/cgi-bin/trac.fcgi <Location "/trac"> AuthType Basic AuthName "Enter your ID" AuthBasicProvider ldap Order Allow,Deny Allow from All AuthLDAPBindDN "CN=okamototk,OU=person,DC=trac,DC=example,DC=com" AuthLDAPBindPassword "BindDNで指定したユーザのパスワード" AuthLDAPRemoteUserAttribute CN # Trac認証後のユーザID # Apache認証持にsAMAccountNameのIDを入力 AuthLDAPURL "ldap://<LDAPのサーバ>/?sAMAccountName,CN?sub?" Require ldap-attribute objectClass=person </Location>
Windows版Apache2.0.59のmod_auth_ldapを使用した場合、設定は問題ないはずなのに認証が通らない場合があります。
その場合は、『Apache2でLDAP認証が失敗する - ほんわかうぃき』を参考にmod_auth_ldapをApache2.0.59のものと入れ替えると上手くいくかもしれません。
エクスプローラの右クリックで好きなディレクトリでコマンドプロンプトを起動できると便利ですよね
レジストリエディタで以下のキーを作成します。
ダブルクリックで設定できるファイルも添付しておきます。 trac-cmd.reg
svnリポジトリを別の場所で更新し、それを元のsvnリポジトリに適用するには、 リポジトリのdbフォルダにあるファイル「current」、 その下のrevpropsフォルダにある新しくコミットしたリビジョン番号ファイル、 revフォルダにある新しくコミットしたリビジョン番号ファイル の3つのファイルをコピーし、 更新するリポジトリに上書きすればいいです。 (但しリポジトリのファイル形式がFSFSである時)
tracで管理してるsvnリポジトリでも同じことができます。 tracを起動しなおしただけで、DBのrevisionには追加されます(TracLightningではそうだった)。
しかしこのままでは、コミットログは、チケットのコメントにならないままとなります。
そこで、sqlite3データベースのrevisionテーブルの情報を元にチケットのコメントを追加する pythonスクリプト(svnlogadd.py)を pythonの勉強がてらに作成しました。 中途半端な出来ですがのせておきます。TracLightning用です。 上記のようにリポジトリ更新した後に python svnlogadd.py tracenv のように実行すると、 input revision: と表示されますのでリビジョンの数字を入力してください。 一つのリビジョンの分が更新されます。
csvから複数のチケットを作成するスクリプトcsv2trac.py
http://trac.edgewall.org/attachment/wiki/TracSynchronize/csv2trac.2.py
は日本語対応ではありませんが、簡単に日本語対応にすることが出来ます。
修正したもの(csv2tracj.py)を添付してます。
また、サンプルのcsvファイル(newticket.csv)も添付してます。
python csv2tracj.py newticket.csv C:\TracLight\projects\trac\tracenvのようにすればチケットが登録されます。
tracにXML-RPCプラグインを適用している場合、 PythonMatrixJpのXML-RPCクライアントヘルパー http://python.matrix.jp/web/xmlrpc_client.html を使うと、Digest認証でも(Basic認証でも使えると思います) pythonでtracと接続できます。 (TracHttpAuthPluginを使うとうまく動きません。)
例えば以下のようなスクリプトではlist(XML-RPC exported functions)をとることが出来ます。 (urlやユーザID、パスワードは適宜書き換え、 local=Trueはプロキシを使う場合は不要です。)
接続した後はxmlrpclibで作業します。例えば
multicall = xmlrpclib.MultiCall(server)のように。xmlrpclibを使う時は
import xmlrpclibが必要です。
windows用のバッチファイルを添付してます。下記のような使い方をしたい人はどうぞ。
・pre-commit.bat
コミットログに"refs #xxx"(xxxは数値)が含まれていなければコミット不可とする。
・pre-revprop-change.bat
USERがadminであれば、logまたはauthorを変更可能、それ以外は不可とする。
・post-revprop-change.bat
USERがadmin、かつACTIONがM、かつlogまたはauthorを変更してるならresyncし、それ以外は何もしない。
jQueryを使った場合、次のようにして取得できる。 <script type="text/javascript" src="jquery.js"></script> ...
$.ajax({ url: '/trac/SampleProject/jsonrpc', contentType: 'application/json', dataType: 'json', type: 'post', data: JSON.stringify( {method:'ticket.query', params:['status!=closed'], id: 12} ), /* 実行が成功した場合 */ success: function(data){ alert(data['result']); alert(data['error']); alert(data['id']); }, /* エラーの場合 */ error: function(result) { alert("error:"+result); } });
$.ajax({ url: '/trac/agile/jsonrpc', contentType: 'application/json', dataType: 'json', type:'post', data: JSON.stringify( {method:'ticket.get', params:[1], id: 12} ), success: function(res){ alert("success"); alert(res['result'][3]['component']); }, error: function(result) { alert("error:"+result); } });
次のようなメッセージが返却される。datetime型やunicodeは自動的に変換されるので考慮する必要はない。
{"id": 12, "result": [ 1, {"__jsonclass__": ["datetime", "2011-01-02T11:58:31"]}, {"__jsonclass__": ["datetime", "2011-01-07T13:21:51"]}, {"status": "new", "changetime": {"__jsonclass__": ["datetime", "2011-01-07T13:21:51"]}, "totalhours": "18.0", "hours": "0", "description": "test", "reporter": "admin", "cc": "", "resolution": "", "time": {"__jsonclass__": ["datetime", "2011-01-02T11:58:31"]}, "component": "\u30c1\u30fc\u30e0B", "summary": "test", "priority": "\u6700\u91cd\u8981", "keywords": "", "billable": "1", "parents": "", "milestone": "\u30b9\u30d7\u30ea\u30f3\u30c80(\u6e96\u5099)", "owner": "admin", "estimatedhours": "20.0", "type": "\uff7d\uff8c\uff9f\uff98\uff9d\uff84\uff8a\uff9e\uff6f\uff78\uff9b\uff78\uff9e"}], "error": null}