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
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ユーザ名とパスワードでアクセスできるか確認する