项目管理系统Redmine支持与不同的软件配置管理(Software Configuration Management,SCM)工具集成,可以在Redmine中查看SCM的内容,也可以使得在SCM中提交代码时自动更改Redmine中的问题状态,以及使Redmine中的问题与SCM中的修订版本形成关联,建立代码与问题的追溯关系。
本文说明Redmine与Subversion(SVN)的关联方法,详细如下:
什么?你还没用过Redmine?好办!你可以从这里获取一套Redmine虚拟机试用一下。
1.确认configuration.yml中有SVN正确命令
Redmine使用config/configuration.yml作为配置文件,如果不存在,需要先创建:
bash
cp config/configuration.yml.example config/configuration.yml
这个配置文件中可以配置电子邮件、版本库SCM命令、附件存储位置、等等。
使用下面命令编辑配置文件:
bash
nano config/configuration.yml
确保配置文件中的scm_subversion_command配置为"svn"或留空,以便使用正确的或默认的svn命令。下面是默认的配置:
bash
# Configuration of SCM executable command.
#
# Absolute path (e.g. /usr/local/bin/hg) or command name (e.g. hg.exe, bzr.exe)
# On Windows + CRuby, *.cmd, *.bat (e.g. hg.cmd, bzr.bat) does not work.
#
# On Windows + JRuby 1.6.2, path which contains spaces does not work.
# For example, "C:\Program Files\TortoiseHg\hg.exe".
# If you want to this feature, you need to install to the path which does not contains spaces.
# For example, "C:\TortoiseHg\hg.exe".
#
# Examples:
# scm_subversion_command: svn # (default: svn)
# scm_mercurial_command: C:\Program Files\TortoiseHg\hg.exe # (default: hg)
# scm_git_command: /usr/local/bin/git # (default: git)
# scm_cvs_command: cvs # (default: cvs)
# scm_bazaar_command: bzr.exe # (default: bzr)
#
scm_subversion_command:
scm_mercurial_command:
scm_git_command:
scm_cvs_command:
scm_bazaar_command:
并且确保这个svn命令在Redmine服务器中可以使用,比如用下面命令确认是否能看到版本号:
bash
svn --version
注意:修改configuration.yml后需要重启Redmine。
2.确认Redmine已启用SVN
登录网页端Redmine,打开"管理->配置->版本库",确保"启用SCM"中的"Subversion"已勾选,并且显示的"命令"与"版本"都与上一步骤中看到的一致(如下图)。

3.配置Redmine项目对应的SVN仓库
在Redmine网页端,进入一个项目的"配置->版本库",如下图:

点"新建版本库",在URL中输入对应SVN仓库的URL路径,其它位置按需要输入(如下图)。

上图中的URL,如果SVN服务端与Redmine安装在同一个服务器,IP地址可以改为"localhost"。这样,就算服务器的IP地址变了也不影响。
点"创建"后就配置好了一个Redmine项目对应的SVN仓库,如下图:

4.在Redmine中查看SVN
经过上面的配置后,可以在Redmine网页端,进入一个项目的"版本库"页面查看SVN内容,如下图:

5.提交代码时自动更改问题状态
通过下面的配置,可以使得在SVN中提交代码(或其它文件)时自动更改Redmine中的问题状态。
5.1.Redmine的配置
登录网页端Redmine,打开"管理->配置->版本库",勾选"自动获取程序变更"和"启用用于版本库管理的Web Service";点"生成一个key"自动产生一个"版本库管理网页服务 API 密钥"。在下面"用于解决问题的关键字"输入约定的关键字(比如"Finish"),"应用后的状态"中选择一个状态(比如"已解决"),"% 完成"中选择一个百分比(比如"100%")。最后点"保存"。如下图:

上面配置好后,在SVN提交修改时只需在"备注/Message"中写上约定的关键字和对应解决的问题号(比如"Finish #<IssueID>",注意:关键字前面不能连着汉字或标点符号,需用空格隔开)就可以自动关联到对应问题了。但是此时提交后,还需要访问一下Redmine中的"版本库"页面,问题状态才会自动更改。
5.2.SVN的配置
可以在SVN服务器中配置post-commit钩子来实现问题状态的自动更改(这样就不需要提交后再访问一下Redmine的"版本库"页面了)。
可以通过SvnAdmin工具来创建和编辑某个SVN仓库的"仓库钩子"(或者在SVN仓库路径下的hooks文件夹中直接创建一个post-commit文件),在Post-commit hook脚本中输入如下内容:
bash
#!/bin/sh
curl "http://<redmine url>/sys/fetch_changesets?key=<your service key>"
其中<redmine url>是Redmine的URL地址(同上,如果SVN与Redmine安装在同一个服务器,IP地址可以用"localhost");<your service key>是之前配置的"版本库管理网页服务 API 密钥"。比如我的post-commit钩子脚本如下:
bash
#!/bin/sh
curl "http://localhost:3000/sys/fetch_changesets?key=M2cXXXXXXXXXXrq5"
至此,Redmine中集成SVN才算配置完。
5.3.自动更改问题状态的效果
按照上面配置完后,以后如果提交一个SVN修订是可以解决Redmine的某个问题时,就在"备注/Message"中写上"Finish #<IssueID>"。这样提交后,用井号#指定的问题就会自动改为"已解决"状态,而且会自动关联刚提交的这个SVN修订版本(可以关联多个版本,如下图)。

点击某个修订版本(比如"修订11"),可以查看这个修订版本的详细信息,其中包括"相关的问题"和SVN中修改的文件(如下图)。

点击"差异"可以查看这个版本与前一版本的差异。
也就是说,可以追溯到Redmine的某个问题对应在SVN中增加或修改的内容。反过来也是,可以追溯到SVN的某个修订对应解决Redmine中的问题。
提示:除了用关键字自动关联SVN与Redmine,还可以点上图中的"新增"手动关联。这样可以补充忘记写关键字的关联。