RedmineとSubversion・Git・Mercurialのリポジトリ(ともに同じCentOSサーバ上)の連携(リポジトリの作成とアクセス・認証)

Redmine上からSubversion,Git,Mercurialのリポジトリ作成ができ、公開したリポジトリにプロジェクトに所属したユーザであれば、Redmineのユーザアカウントでアクセスできるようになります。

Subversion,GitなどのツールやRedmineとアジャイル開発、継続的インテグレーションに便利な各種プラグインに加え、今回の連携設定などをまとめてインストールできるALMiniumというものがあります。

前提

  • OSがCentOS
  • Apacheをインストール済み
    (# yum install httpd)
  • Apacheの実行ユーザ名とグループ名はapache
  • Subversionとmod_dav_svnモジュールがインストール済み
    (# yum install subversion mod_dav_svn)
  • Gitインストール済み(# yum install git)
  • Mercurialインストール済み(# yum install mercurial)
  • Redmineをインストール済み
    (http://blog.redmine.jp/articles/redmine-1_2-installation_centos/)
  • redmineのDBはMySQLで同じサーバで稼働
  • redmineのインストールディレクトリを$REDMINE_ROOTとする
  • SVNリポジトリを格納する親ディレクトリを/var/www/repos/svnとする
  • GITリポジトリを格納する親ディレクトリを/var/www/repos/gitとする
  • Mercurial(Hg)リポジトリを格納する親ディレクトリを/var/www/repos/hgとする
  • http://example.jp/repos/svnがSVNリポジトリのURLとする
  • http://example.jp/repos/gitがGITリポジトリのURLとする
  • http://example.jp/repos/hgがHgリポジトリのURLとする

1.リポジトリの親フォルダの作成

# mkdir -p /var/www/repos/{svn,git,hg}
# chown -R apache /var/www/repos

2.SCM Repository Creation pluginのインストール

RedmineからSubversion・Git・Mercurialのリポジトリの作成ができるプラグイン

a). ダウンロード

http://projects.andriylesyuk.com/projects/redmine-svn/wiki/Installの横にあるダウンロードリンクからredmine_scm-0.2.0.tar.bz2をダウンロード

b). インストール

解凍としてできたredmine_scmをフォルダ丸ごと$REDMINE_ROOT/vendor/pluginsに移動

c). DBマイグレーション

$ rake db:migrate:plugins RAILS_ENV=production

d). プラグインの設定ファイルの追加

$cp $REDMINE_ROOT/vendor/plugins/redmine_scm/config/scm.yml $REDMINE_ROOT/config/scm.yml
$vi $REDMINE_ROOT/config/scm.yml

production:
  auto_create: false
  deny_delete: true
  svn:
    path: /var/www/repos/svn
    svnadmin: /usr/bin/svnadmin
    url: http://example.jp/repos/svn
  git:
    path: /var/www/repos/git
    git: /usr/bin/git
    options: --bare
    url: http://example.jp/repos/git
    update_server_info: true
    git_ext: true
  mercurial:
    path: /var/www/repos/hg
    hg: /usr/bin/hg
    url: http://example.jp/repos/hg

development:

※不要なSCM部分はカットする
deny_delete
リポジトリの削除を禁止するか
falseに設定するとプロジェクトの「設定」→「リポジトリ」に「削除」のリンクが現れる
削除するとリポジトリ情報リポジトリ自体も削除される
path
リポジトリの親ディレクトリ
この下に各プロジェクトのリポジトリが作成される
url
HTTPでアクセスする際のURLプレフィックス
リポジトリを作成した後、プロジェクトの「設定」→「リポジトリ」の画面にURLが表示される

e). Redmine再起動

# service httpd graceful
(Passengerを使用しているのでApacheの再起動で代用)

f). 「管理」→「プラグイン」「SCM Creator」が追加されているのを確認

g). 所属しているプロジェクト→設定→リポジトリと移動し、リポジトリを作成してみる

「バージョン管理システム」から「Subversion」を選択すると、
URLに親フォルダ+プロジェクト識別子が入力された状態になる
ログイン、パスワードは空のまま「Create new repository」を押すとURLの場所にリポジトリが作成される

3.各リポジトリのHTTPアクセスとRedmineの認証情報の連携

参考:http://www.redmine.org/projects/redmine/wiki/Repositories_access_control_with_apache_mod_dav_svn_and_mod_perl

a). 必要パッケージのインストール

# yum install mod_perl perl-DBI perl-Digest-SHA1 perl-DBD-MySQL

b). Redmine.pmにパッチを当てる(Git用)

SubversionのリポジトリにHTTPでアクセスする際、Redmineに付属しているRedmine.pmを使用して認証を行います。
Redmine.pmはSubversion用のものなので、http://www.redmine.org/issues/4905にあるパッチを当てることでGitリポジトリにHTTPでアクセスできるようになります。

# cd $REDMINE_ROOT/extra/
# cp Redmine.pm Redmine.pm.orig (バックアップのため)
# wget "http://www.redmine.org/attachments/download/5989/0001-merged-LeeF-s-patch-with-Michael-Fox-s-security-fix-redminetrunk.patch" (上記URLの最新のパッチ)
# patch Redmine.pm < 0001-merged-LeeF-s-patch-with-Michael-Fox-s-security-fix-redminetrunk.patch

c). Redmine.pmをperlのインクルードパスが通っている場所に設置する

設置例:

  • /etc/httpdにApacheディレクトリを作成し、その中にAuthnディレクトリを作成しその中にRedmine.pmを入れる
  • /usr/lib/perl5/Apache/Authn/にRedmine.pmを入れる(ディレクトリがない場合は作成する)

d). hgweb.cgiの設定(Mercurial用)

#cp /usr/share/doc/mercurial-x.x.x/hgweb.cgi /var/www/repos/hg/  (x.x.xはインストールされたmercurialのバージョンです。)

#vi /var/www/repos/hg/hgweb.config
[paths]
/=/var/www/repos/hg/**

[web]
allow_push = *
allowbz2 = yes
allowgz = yes
allowzip = yes

#vi /var/www/repos/hg/hgweb.cgi
7行目
config = "/path/to/repo/or/config"
↓
config = "hgweb.config"

e). Apacheの設定

# vi /etc/httpd/conf.d/redmine.conf
  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

    ## for mysql
    RedmineDSN "DBI:mysql:database=redmine_db;host=localhost"
    RedmineDbUser "redmine_user"
    RedmineDbPass "redmine_pass"
  </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_pass"
    RedmineGitSmartHttp yes
  </Location>

  # Mercurial
  ScriptAliasMatch ^/repos/hg(.*)  /var/www/repos/hg/hgweb.cgi/$1
  <Location /repos/hg>
    AuthType Basic
    AuthName "Redmine Mercurial 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_pass"
  </Location>

データベース名、データベースアクセスユーザ名・パスワードは適宜変更して、Apache再起動

# service httpd configtest
# service httpd graceful

f). 認証が有効になっているか実際にアクセスする

  • svn ls / git clone / hg clone
  • TortoiseSVN・TortoiseGit・TortoiseHgなどを使用してアクセス

Redmineユーザ名とパスワードでアクセスできるか確認する

About these ads

RedmineとSubversion・Git・Mercurialのリポジトリ(ともに同じCentOSサーバ上)の連携(リポジトリの作成とアクセス・認証)」への1件のフィードバック

  1. ピンバック: Redmine.pmにGit用パッチを当てた後のRedmine.pm » tech.ewdev.info

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中