项目管理
项目管理,缺陷跟踪软件,如:mantis, trac, redmine
Redmine 和 subversion 版本库整合的问题
11月17日
有网友问:
请问,如果我的svn是在另外一台服务器,也通过HTTPS能访问了,在redmine还要做什么设置吗?我输入https的地址,但是redmine始终无法找到svn代码库
我先说一下在 Redmine 中通过 HTTP 协议访问远程 Subversion 版本库
我们最早研究的 Redmine,大概是 Redmine 0.8.5,通过 http 协议配置远程版本库,Subversion 的提交总是不能被 Redmine 获取。在排除了 Subversion 授权和认证的可能原因之后,我们发现问题出在 Redmine 调用 svn 命令被阻塞。
即:必须先在服务器以 Apache 的用户(www-data)访问 subversion(HTTP 协议),使用 SVN 命令行。在访问过程中,会出现交互性的提示:“是否在磁盘缓存明文口令之类的提示”,选择“是”之后, Redmine 就可以正常连接到 Subversion 服务器了。
通过研究代码,我们发现 Redmine 直接调用 Subversion 命令来获取 Subversion 的日志和提交之类,如果在命令行中传递参数:“–no-auth-cache” 等就可以避免因为 redmine 调用 svn 命令被阻塞。
Redmine 0.8.6 的改进
Redmine 0.8.6 改进了这个问题,和 0.8.5 的代码差异:
$ git diff 661bd08^ 661bd08 -- subversion_adapter.rb
diff --git a/lib/redmine/scm/adapters/subversion_adapter.rb b/lib/redmine/scm/adapters/subversion_adapter.rb
index 1c85e84..b10100f 100644
--- a/lib/redmine/scm/adapters/subversion_adapter.rb
+++ b/lib/redmine/scm/adapters/subversion_adapter.rb
@@ -224,6 +224,7 @@ module Redmine
str = ''
str << " --username #{shell_quote(@login)}" unless @login.blank?
str << " --password #{shell_quote(@password)}" unless @login.blank? || @password.blank?
+ str << " --no-auth-cache --non-interactive"^M
str
end
end
什么意思呢?因在 Redmine 在调用 SVN 命令的时候,是这么封装的:
# Get info about the svn repository
def info
cmd = "#{SVN_BIN} info --xml #{target('')}"
cmd << credentials_string
info = nil
shellout(cmd) do |io|
。。。
end
即 Redmine 0.8.6 在连接 subversion 的时候已经能够传递参数“–no-auth-cache –non-interactive” 了。
HTTPS 协议呢?
要知道 subversion 还有一个参数:
--trust-server-cert : 不提示的接受未知的 SSL 服务器证书
你的 Redmine 一定是在连接 HTTPS 协议的时候,因为证书问题被阻塞。你可以尝试更改 redmine 代码,并且要保证连接 SVN 的 URL 的主机名一定和证书中声明的一样。
为什么不用本地协议?
使用 HTTPS 协议除了有上面的麻烦之外,和 HTTP 协议一样,还需要配置专用帐号访问,此专用帐号还要拥有 Subversion 最高访问权限,否则只能有部分提交能够看到。
使用本地 file:// 协议是最理想的,无须认证信息。对于远程版本库,可以通过 svn 同步保持两者的一致。

Redmine 中的 Subversion 版本库设置
11月1日
Redmine 管理员手册关于 svn 版本库设置写的不是很详细,在这里补充一下。
用 Redmine 创建一个项目后,进入项目的设置界面,访问“版本库”标签,可以为项目建立匹配的版本库设置。
如果是 Subversion,在下拉框选择 Subversion,其它设置参考下面的示意图:
注意:
- 在 URL 处使用 file:// 协议。一般我们把版本库部署在 /opt/svn/svnroot 下,所以 URL 的开头一般是:
file:///opt/svn/svnroot/… (注意 file: 后面有三个斜线,分别是协议要求的两个斜线,和一个代表根路径的斜线) - URL一般直接指向版本库的根路径。如果多个项目共用同一个版本库,也可以使用 版本库下的某个路径,如:
file:///opt/svn/svnroot/myproject/path/to/project1 - 因为使用 file:// 本地协议,因此不必输入认证的登录名和密码。
- 最后两个字段用于版本库浏览时的授权。
- 其中授权文件,我们习惯的部署位置是:
/opt/svn/conf/svn.access - 模组名就是版本库的名称,例如 myproject 。
- 如果授权文件和模组不填写,开发者都能够通过 redmine 查看源代码。
- 如果授权文件写错位置(找不到),会导致任何人都无法通过 redmine 查看代码。

Redmine 邮件发送问题的诊断
9月17日
鉴于部分 redmine 爱好者因邮件发送问题很纠结,不知道为何他/她的 redmien 邮件时灵时不灵,回帖的地方太小,因此专门辟此博文。
(说明:下文中出现的 redmine 配置文件路径是 群英汇 Redmine 部署的标准路径,个人配置的 redmine 请勿对号入座 :-D )
Redmine Email 配置
配置文件为 /opt/redmine/web/config/email.yml 。我们内网的 redmine 的 email.yml 配置为:
production:
delivery_method: :smtp
smtp_settings:
address: localhost
port: 25
domain: bj.ossxp.com
# authentication: :login
# user_name: "redmine@example.net"
# password: "redmine"可以看出:
- 我们 redmine 服务器本身架设了一个 SMTP 服务器
这样就避免了使用其他 SMTP,由于授权、网络联通性、邮件发送频率限制、内容过滤等各种原因造成的邮件发送失败的问题 - domain 实际上是 SMTP 连接时 HELO 命令的参数。
一般情况,无所谓。但有的 SMTP 会作 DNS 查询,若 SMTP 客户端 IP 和该域名解析的不一致,可能会倒在这里 O:-) - 后面的三条认证相关语句注释掉,因 localhost 自身允许 open relay,故此没有必要设置认证
实际上,Redmine 的邮件发送框架采用 Rails 自身的 actionmailer,还有一些重量级配置
- logger: 是否对邮件处理产生日志?
Redmine 缺省 production(生产平台)的 environment 设置中, logger 被设置为 nil,不产生和邮件有关的日志 - raise_delivery_errors: 是否因为邮件发送错误,抛出异常?
如果设置为 true,则遇到邮件发送失败,页面显示异常,同时在 log 中也记录异常详细信息
直接在管理员界面测试邮件配置
看到“发送测试邮件”的链接了么?
Redmine 的日志文件
日志文件的位置在 /opt/redmine/log 目录下。对于生产平台,日志文件是 /opt/redmine/log/production.log。
一个 Linux 下跟踪显示 log 文件的小窍门:
$ tail -f /opt/redmine/log/production.log
产生更多的邮件相关日志
对于运行在 production 模式的 Redmine,日志很少,是因为配置文件 /opt/redmine/web/config/environments/production.rb 中关闭了 email 相关 log 等。
配置文件 /opt/redmine/web/config/environments/production.rb 和日志相关设置有:
- config.log_level = :error
日志级别。如果设置为 :info,则有更多日志。如果设置为 :debug,你会看到海量的日志。 - config.action_mailer.raise_delivery_errors = false
是否因为邮件发送错误抛出异常。设置为 true,你不会错过任何邮件发送失败了,不过副作用么… ;-) - config.action_mailer.logger = nil
不记录邮件相关的日志。注释掉这一行,就可以在日志文件中看到更多邮件相关日志了。
修改日志别忘了重启 Apache。注意:日志级别调整,会影响 redmine 的性能,在诊断结束后请复原。

Redmine 计划任务增加“未来”的选项
8月29日
群英汇开发的 Redmine 计划任务插件为我的工作带来极大的便利,让我的工作更有计划性。
最近,我们公司开发人员除了对“计划任务插件”进行代码重构并解决了“星期日”Bug外,还采纳了我的一个建议,增设了一个“未来”选项。即问题的计划日期,除了今天/明天/后天/本周/下周/下下周等之外,增加一个“未来”选项。
以程序员的观点,增加“未来”选项可能没有必要,但是以项目经理/项目负责人看来,却非常需要。
- 因为项目负责人思考的问题除了一些短期目标之外,还包括一些长远的目标,甚至只是一些暂时看起来荒谬的想法。
- 如果这些长远目标或者“荒谬”的想法,不能加入到合适的计划任务,就会在“None组”(未列入计划的事件)中堆积
- 堆积如山的“None分组”,会导致新创建的问题,不能立即被发现造成拖延。
最终实现的“未来”,让我的“荒谬”的点子有家可归了。

晒晒我的计划任务
8月10日
我真的很喜欢我们最新开发出来的 Redmine 计划任务的功能。最早接触类似功能是 Eclipse Mylyn,能够管理我在 Trac 中的任务,但是 Mylyn 的存在的问题在于:设置复杂,而且 Eclipse 加载慢占用资源多。
为什么不在每天都用的基于 Web 的项目管理平台中加入这个功能呢?这就是我们开发的 Redmine 计划任务功能的由来。
今天好好的用了一下,提了几个改进意见。这不,最新改进的计划任务隐藏没有任务的时间段,缺省自动展开显示。
晒晒我的计划任务。(图中任务仅为示例,是在我笔记本演示环境中的)
从上图可以看出:
- 可以很方便的通过右键菜单为属于你的计划任务设定时间表
- 按照设定的时间段分组显示,缺省打开全部分组。没有任务的分组缺省不显示
- 到期没有完成的任务,会永远定格显示在“今天”,直到你完成并关闭之
- 如果有任务被设定了“规定的完成日期”,则会按照设定的计划任务和规定完成日期最近的日期分组
- 看到了,够 Mylyn 的吧

Redmine任务日程安排(类似Mylyn)的功能
8月9日
当开发人员登录Redmine后,页面将跳转到我的工作台界面。在这里默认可以看到指派给当前用户的任务(仅显示10条,通过左下角查看所有问题的链接才能看到所有指派给当前用户的任务),以及当前用户报告的问题。因此开发人员可以清晰看见指派给自己的任务,进而逐一解决。
但当指派给某一开发人员的任务达到数十个以上时,开发人员每天都就会陷入筛选任务的琐碎事件中,而且还会产生无从下手的茫然:任务太多了,不知先处理哪些,后处理哪些。
群英汇为Redmine添加任务日程安排功能,正是基于此需求实现的,为开发人员带来了福音。
该功能允许开发人员对指派给自己的问题设置计划日期,Redmine自动根据设置的计划日期分组显示指派给自己的任务。这样以来,开发人员的工作就井然有序了,可以把主要精力放在项目开发中了。
更多关于此功能的介绍可以移步到 Redmine用户手册
Redmine与Mylyn的整合
8月9日
众所周知,Eclipse是一款免费开源而且功能强大的IDE,尤其是其灵活的插件扩展机制更使它锦上添花。
对于开发人员来说,要处理的任务太多,那么有没有一个工具可以让开发人员自由规划自己的任务呢?
Mylyn的诞生给开发人员带来了福音,从此开发人员的工作变得井然有序。
Mylyn 是一个Eclipse任务管理(task management)插件。它提出了任务仓库和任务列表的概念。任务仓库可以是本地的,也可以是互联网上基于Web的任务管理或者缺陷管理系统。任务列表则是从任务仓库中取出的符合查询条件的一组任务。同时它还提供了本地个人日程安排的功能。可以将任务列表的任务根据具体情况设置日程。
那么Redmine作为一款灵活易用的项目管理与缺陷跟踪工具,能否和Mylyn整合呢?
答案是肯定的。具体的整合步骤我已经写成文档,放在Redmine的用户手册中。需要该功能的用户可以移步到 Redmine与Mylyn的整合过程
群英汇redmine增强版ossxp-3.0成功上线
7月20日
经过三个多月努力,群英汇Redmine 增强版ossxp-3.0终于成功上线。
下面介绍一下 ossxp-3.0 版本的新特征:
- 上游版本库升级到Redmine官方的1.0.0版本. Redmine 1.0.0 引入的新特征:
- 支持子任务(subtask)
当发现起初的任务划分过于粗粒度,可以将起初的任务再划分成若干个子任务,每个子任务指派给某个成员。这样从另一方面实现了一个父任务指派给多人。 - 支持通过邮件提交问题时设置指派者和问题(issue)的起始日期
- 支持从POP3服务器读取邮件
redmine-1.0.0之前仅支持从IMAP服务器读取邮件。
关于redmine通过邮件提交问题,具体可以参考 http://redmine.ossxp.com/redmine/documents/4 - 增强了wiki功能
wiki底层库升级,使redmine的wiki更加稳定、健壮
- 支持子任务(subtask)
Redmine关于敏捷Scrum的插件
7月19日
这几年来,敏捷开发风靡全球,尤其是Scrum这股风。那么Redmine作为优秀的项目管理工具,是否支持Scrum流程呢?Redmine Sprints 正是在这种呼吁中应运而生。
借助于Redmine Sprints 插件,可以有效地将Scrum流程包含进Redmine的管理流程:
- 产品负责人(Product Owner)可以登录Redmine,在Backlog页面向产品Backlog中添加用户故事(User Story),并根据功能的重要程度,设置适当的优先级。
- 在Scrum计划会议上,登录Redmine,进入Backlog页面,根据User Story的优先级来确定即将开始的Sprint要完成哪些User Story,并将这些User Story挪到这个Sprint的Backlog中。
- Scrum团队成员可以登录Redmine,进入任务板页面,根据具体情况,将Sprint中的User Story划分成一个个小的功能模块(即任务),各个成员根据自己的能力来领取这些小任务。
- 接下来Scrum团队的成员就可以集中精力完成自己领取的任务了。并且应该每天都要在任务面板里更新自己的任务状态,同时燃烧曲线(BurnDown)会自动根据任务的完成情况发生变化,从而真实反映项目的进展情况。
具体细节请参考 http://www.ossxp.com/doc/redmine-plugins/redmine-sprints/








最新评论