自动创建版本库

概述

从版本 0.5.0 开始,Redmine可以创建Subversion版本库。此功能由 extra/svn/ 目录中的 reposman.rb 完成。而在最近的新版Redmine(0.6.0、rev860或更高版本)中,reposman.rb可以在Redmine中自动注册新建的版本库并设置版本库的所有者。如果您使用的是老版本的Redmine,您只能手动注册版本库。

项目信息通过SOAP web service接口从Redmine获取。Redmine中的该web service默认是禁用的。可以使用 << 管理 -> 配置 >> 中的“启用用于版本库管理的Web Service ”选项来激活它。

在继续进行之前,请先确定一些名字,例子中将使用 my.redmine.host 作为redmine的主机名称、 my.svn.server 作为svn服务器的地址。您必须先创建存放所有版本库的目录,目录的所有者必须是root。下例将使用 /var/svn

mkdir /var/svn
chown root:root /var/svn
chmod 0750 /var/svn

您还需要选择apache用来提供版本库服务的目录,下例中使用 /svn ,这样版本库路径将类似于 http://my.svn.server/svn/PROJECTID/ 。最后,您还必须选择apache用来供Redmine浏览的目录,下例中使用 /svn-private/

某些情况下,您需要知道apache的用户名,在debian/ubuntu这些操作系统上是 www-data ,下例中也将使用此用户名。

警告

请注意reposman.rb低于rev916的版本存在一个权限问题。您不必升级redmine,而可以只更新 reposman.rb

使用Perl编写的reposman已经在新的安装包中被移除,因为它无法注册和设置所有者。

命令行参数

有2个参数是必需的:

  • svn-dir: svn版本库的路径
  • redmine-host: 安装Redmine的主机名称

还有2个可选参数(从rev860版本开始加入):

  • owner: 版本库的所有者
  • url: 供Redmine访问您的版本库的基础url地址。reposman将使用此参数来为您自动注册版本库。

使用Perl编写的reposman已经在新的安装包中被移除,因为它无法注册和设置所有者。

继续进行前必需确定的问题

如果Redmine和您的svn版本库在同一台服务器上,您可以使用svn的 file:/// 协议来来浏览版本库,尽管这个方法看起来不错,但如果您以后希望将版本库转移到其它服务器上的话将可能会碰到麻烦,因为那时您将无法修改redmine中的版本库路径。

我认为目前最好的方式还是假定版本库和redmine不在同一台服务器上,而让redmine使用subversion的网络协议来浏览版本库。

如果您希望使用本地浏览(file:///协议),则可以使用 --url file:///var/svn/ 参数。

通过apache/webdav和mod_perl认证进行自动的版本库创建

继续进行前,我们需要先确定reposman可以找到Redmine的Web Service。 使用一个没有 /var/svn 目录写入权限的非管理员用户 执行以下命令:

ruby reposman.rb --redmine my.redmine.host --svn-dir /var/svn --owner www-data --url http://my.svn.server/svn-private/ --verbose
querying Redmine for projects...
retrieved 2 projects
treating project myproject
svnadmin: Repository creation failed
...

创建将失败,因为您没有权限,但这可以确定reposman可以找到Redmine的Web Service病毒渠道项目信息。

如果此命令执行失败,请确认您已经选中了“启用用于版本库管理的Web Service”选项。

现在可以确定一切都是正常的了,您只需使用root权限运行reposman.rb即可:

reposman.rb --redmine my.redmine.host --svn-dir /var/svn --owner www-data --url http://svn.server/svn-private/

请小心使用 --url 参数,您以后将无法改变它。

您可以在crontab中加入下面一行:

cat /etc/cron.d/redmine
10 * * * * root ruby reposman.rb --redmine my.redmine.host --svn-dir /var/svn --owner www-data --url http://my.svn.server/svn-private/ >> /var/log/reposman.log

这部分的工作就基本完成了。

Web Service 和安全

目前,Web Service被开启后所有人都可以访问到,您肯定不希望某些人在您的版本库中注册项目吧。您可以在apache中控制Web Service的访问权限(如果不使用apache的话,您可能得自己找个办法了...),具体方法是像这样修改apache的Location参数:

<Location /sys>
  Order allow,deny
  Allow from ip.of.my.svn.server
</Location>

所以,如果您使用apache和mongrel的话,您的配置文件看起来可能像这样:

<VirtualHost *:80>
  ServerName redmine.my.domain
  ServerAdmin webmaster@localhost

  <Location /sys>
    Order allow,deny
    Allow from ip.of.my.svn.server
  </Location>

  ProxyPass / http://localhost:3000/
  ProxyPassReverse / http://localhost:3000/
</VirtualHost>

Also available in: HTML TXT