Redmine+SVN/Gitの環境構築 (3) | パークのソフトウエア開発者ブログ|ICT技術(Java・Android・iPhone・C・Ruby)なら株式会社パークにお任せください

パークのソフトウエア開発者ブログ|ICT技術(Java・Android・iPhone・C・Ruby)なら株式会社パークにお任せください

開発の解決方法や新しい手法の情報を、パークのエンジニアが提供します。パークのエンジニアが必要な場合は、ぜひお気軽にお問い合わせ下さい。 株式会社パーク:http://www.pa-rk.co.jp/

こんにちは、中村です。
最終回の今回は、RedmineのプラグインをインストールしてSVN/Gitとの連携できるようにしていきます。

まずはSVN、Gitをインストール、リポジトリの親ディレクトリを作成します。
$ sudo yum install subversion mod_dav_svn git
$ sudo mkdir -p /var/www/repos/{svn,git}
$ sudo chown -R apache:apache /var/www/repos

Redmineとリポジトリの連携ができるプラグイン、SCM Creatorをインストールします。
バージョンは2012/12/24現在の最新バージョン、0.4.2を使っていきます。
$ sudo yum install mod_perl perl-DBI perl-Digest-SHA perl-Digest 今回は-SHA1 perl-DBD-MySQL
$ cd $HOME/temp
$ curl -o redmine_scm-0.4.2.tar.bz2 http://projects.andriylesyukcom/attachments/download/388/redmine_scm-0.4.2.tar.bz2
$ tar xvjf redmine_scm-0.4.2.tar.bz2
$ sudo mv redmine_scm /var/lib/redmine/plugins/redmine_scm
$ sudo chown -R apache:apache /var/lib/redmine/plugins/redmine_scm

SCM CreatorのDBを構築します。
$ cd /var/lib/redmine
$ rvm use 1.9.3-p327@redmine
$ rvmsudo rake redmine:plugins:migrate RAILS_ENV=production

SCM Creatorの設定ファイルを作成します。
production:
  deny_delete: true
  auto_create: false
  svn:
    path: /var/www/repos/svn
    svnadmin: /usr/bin/svnadmin
    url: repos/svn
  git:
    path: /var/www/repos/git
    git: /usr/bin/git
    options: --bare
    url: repos/git
    update_server_info: true
    git_ext: true
  mercurial:
    path: /var/lib/mercurial
    hg: /usr/bin/hg
  bazaar:
    path: /var/lib/bazaar
    bzr: /usr/bin/bzr
    init: init-repository
    log_encoding: UTF-8

development:


Redmine.pmをperlのインクルードパス配下にコピーします。
ちなみに、このRedmine.pmはRedmine 2.0系まではGitを使用するためにpatch当てが必要だったんですが、2.1に上がってからRedmineのtrunkにpatchが反映されて、(少しですが)面倒な作業がなくなってます。
$ cd /var/lib/redmine/extra/svn
$ sudo mkdir -p /usr/lib64/perl5/vendor_perl/Apache/Authn
$ sudo cp /var/lib/redmine/extra/svn/Redmine.pm /usr/lib64/perl5/vendor_perl/Apache/Authn/Redmine.pm

Redmineの設定ファイルを記述します。
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

  RedmineDSN "DBI:mysql:database=redmine_db;host=localhost"
  RedmineDbUser "redmine_user"
  RedmineDbPass "redmine"
</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"
  RedmineGitSmartHttp yes
</Location>
httpdを再起動します。
$ sudo /etc/init.d/httpd restart

これでRedmineにアクセスすると、プロジェクトにSVN/Gitのリポジトリが追加できるようになっているはずです。
SVN/Gitクライアントでの認証もRedmineのユーザ/パスワードでできようになっているので、確認してみてください。


尚、プロジェクトがPublic(Redmineでプロジェクト作成時のデフォルト)だと、Redmine.pmが原因で500エラーが発生します。
"Anonymous"Roleの閲覧権限があるかどうかのチェックでコケているので、以下のいずれかの方法で解決できます。
     
  1. Redmineの管理者アカウントでログインし、プロジェクトの"Public"チェックボックスを外す
  2.  
  3. Redmineの管理者アカウントでログインし、"Anonymous"Roleの編集画面で、何も編集せずにSaveボタンをクリック
  4.  
  5. Redmine.pmを以下のように編集し、anonymous_role_allows_browse_repositoryのif文の中で変数チェックを記述
sub anonymous_role_allows_browse_repository {
  my $r = shift;

  my $dbh = connect_database($r);
  my $sth = $dbh->prepare(
      "SELECT permissions FROM roles WHERE builtin = 2;"
  );

  $sth->execute();
  my $ret = 0;
  if (my @row = $sth->fetchrow_array) {
     if (defined($row[0]) && $row[0] =~ /:browse_repository/) { # 変数チェックを追加
      $ret = 1;
    }
  }
  $sth->finish();
  undef $sth;
  $dbh->disconnect();
  undef $dbh;

  $ret;
}

今回の内容は下記のサイトを参考にさせていただいています。
http://mistymagich.wordpress.com/2011/10/19/redmine_and_subversion-git-mercurial-repository