前言
22 年 7 月下旬,公司原使用的研发协作平台 TAPD 在后台给我司发来了收费通知,将于自 9 月 1 日起结束试用,开始收费。约腾讯方面沟通报价得知一年需要大几十万(我司人数较多)。公司管理层评估决定迁移至 Redmine。本文记录了我们曾部署到 Redmine 的插件以及一些配置技巧,供大家参考。
环境
Redmine version:4.2.2.stable
Ruby version:2.7.4-p191 (2021-07-07) [x86_64-linux-musl]
Rails version:5.2.6
Environment:production
Database adapter:Mysql2
Mailer queue:ActiveJob::QueueAdapters::AsyncAdapter
Mailer delivery:smtp
主题
链接:GitHub - mrliptontea/PurpleMine2: A free Redmine theme for modern browsers
我们选用了 PurpleMine2 作为 Redmine 主题,主要是界面比较优雅,同时可以支持一定程度的自定义,我们将不同的跟踪标签进行颜色区分:
界面配置技巧
1. 问题列表界面
在项目中的问题列表界面,如果同时选择展现多个列(如多个自定义属性、问题内容)时,会出现因各列宽度未作定义而导致内容换行的问题,非常影响用户浏览,如下图:
这个问题可以通过对问题列表页面的 CSS 文件进行修改来解决:
我们使用的是 PurpleMine2 主题,所以修改的是:
redmine根目录/themes/PurpleMine2-master/stylesheets/application.css
找到表头的对应的列id,添加最小宽度设置即可:
table.list .table-list-header{min-width:80px;} #所有表头最少为80px
table.list th.subject{min-width:480px;} #标题最少为480px
table.list th.id{min-width:20px;} #问题id最少为20px
table.list th.checkbox{min-width:20px;} #问题的选择框最少为20px
更新后各列宽度将有最小值,可以拖动滚动条进行浏览:
2. 问题创建时间与更新时间的显示格式
在 Redmine 的问题详情页面,问题的创建时间与更新时间默认是以 XX 天之前的格式显示,在我们实际的工作场景中,我们认为这种显示不够直观,还需要去换算一下到底是几月几号创建/更新的,如下图:
解决方法为更新 redmine根目录/app/helpers/application_helper.rb 文件
- def time_tag(time)
- text = distance_of_time_in_words(Time.now, time)
- if @project
- link_to(text,
- project_activity_path(@project, :from => --- User.current.time_to_date(time)),
- :title => format_time(time))
- else
- content_tag('abbr', text, :title => format_time(time))
- end
- end
+ def time_tag(time)
+ text = format_time(time)
+ end
同时,中文翻译对应修改 redmine根目录/config/locales/zh.yml 文件:
label_added_time_by: "由 %{author} 在 %{age} 添加"
label_updated_time: " 更新于 %{value} "
label_updated_time_by: "由 %{author} 更新于 %{age} "
更新后效果:
插件
1. customfield_checkbox_utility——版本:0.0.3
链接:GitHub - preciousplum/customfield_checkbox_utility
该插件主要功能是增强【用户】及【列表】格式的自定义属性功能,可以将原来编辑页面的下拉框或列表变为一个支持搜索的多选模块,如下图红框处。该插件可以配合【notify_custom_users】插件,通过自定义用户字段实现多个指派人/处理人的功能
2. notify_custom_users——版本:1.0.2
链接:https://github.com/Restream/notify_custom_users
该插件支持向【用户】格式的自定义属性发送问题更新的通知,我们将其与【redmine_work_wechat】企业微信通知插件配合使用,实现对问题中不同用户的信息推送。
3. redmine_ckeditor——版本:1.2.3
链接:http://github.com/a-ono/redmine_ckeditor
富文本编辑器,安装该插件后通过 Rest Api 向 Redmine 创建问题时,问题描述可以以 HTML 源码形式传入/编辑(支持图片、模版样式等),在线编辑时也支持将截图直接粘入,十分建议安装。
* 该插件与【redmine_mentions】插件冲突,无法在问题描述中 @ 到对应人员
** 若使用 Docker 多节点部署 Redmine,需要将“redmine/public/system/rich/rich_files/rich_files
”路径持久化,否则插入的图片将有几率丢失
*** 启用截图粘贴功能需要在 Redmine 根目录 config 文件下新增 ckeditor.yml 文件,内容如下:
# CKEditor configuration
allowedContent: true
bodyClass: "wiki"
removePlugins: "div,flash,forms,iframe"
forcePasteAsPlainText: false
# HTML sanitizer configuration
allowedProtocols:
- afs
- aim
- callto
- ed2k
- feed
- ftp
- gopher
- http
- https
- irc
- mailto
- news
- nntp
- rsync
- rtsp
- sftp
- ssh
- tag
- telnet
- urn
- webcal
- xmpp
- data
allowedTags:
- a
- abbr
- acronym
- address
- b
- big
- blockquote
- br
- caption
- cite
- code
- dd
- del
- dfn
- div
- dt
- em
- h1
- h2
- h3
- h4
- h5
- h6
- hr
- i
- iframe
- img
- ins
- kbd
- li
- ol
- p
- pre
- s
- samp
- small
- span
- strike
- strong
- sub
- sup
- table
- tbody
- td
- tfoot
- th
- thead
- tr
- tt
- u
- ul
- var
allowedAttributes:
- abbr
- align
- alt
- border
- cellpadding
- cellspacing
- cite
- class
- colspan
- datetime
- dir
- height
- href
- name
- nowrap
- reversed
- rowspan
- src
- start
- style
- title
- valign
- width
- xml:lang
4. redmine_issue_templates——版本:1.1.0
链接:https://github.com/agileware-jp/redmine_issue_templates
该插件支持针对不同跟踪标签,预设问题描述模板,可用于标准化问题的提交与编辑样式。支持管理员全局设定或针对单一项目池个性化配置。
该插件与【select_to_select2】插件存在冲突,启用【select_to_select2】插件后,在新建问题时会出行描述模板无法自动加载的 bug,解决方法请见下文。
5. redmine_issues_tree——版本:0.0.14
链接:https://github.com/Loriowar/redmine_issues_tree
该插件支持以树状的形式展现问题列表,但是因无分页功能,会在单一项目池内问题数量过多时导致页面极度卡顿,已弃用。
6. redmine_ldap_sync——版本:2.1.1.devel
链接:GitHub - thorin/redmine_ldap_sync: [UNMAINTAINED] A redmine plugin to synchronize both users and groups with an ldap server
该插件用于扩展 LDAP 授权登陆功能,可以定期同步用户数据。
7. redmine_logs——版本:0.2.0
链接:GitHub - haru/redmine_logs: Redmine logs plugin
主要用于管理员在管理后台查看、下载系统日志便于进行日志分析。
8. redmine_mentions——版本:0.1.1
链接:https://github.com/tainewoo/redmine_mentions
该插件支持使用人在编辑问题时 @ 到对应人员,被 @ 到的人将收到系统通知。该插件与【redmine_ckeditor】冲突,因此我们未作进一步使用与研究。
9. redmine_searchable_selectbox——版本:0.1.10
链接:https://github.com/ishikawa999/redmine_searchable_selectbox
该插件可使 Redmine 中自定义属性的下列框支持关键字搜索,功能与【select_to_select2】插件类似,但在多选情景下不够【select_to_select2】插件好用,已弃用。
10. redmine_smile_project_enumerations_custom_field_format——版本:1.3.15
链接:https://github.com/Smile-SA/redmine_smile_project_enumerations_custom_field_format
该插件支持各项目池个性化配置自定义属性的候选值,如管理员在系统级配置一个自定义属性“需求分类”,各项目池可以基于自身需要配置“需求分类”的候选值。
* 该插件的不足在于,自定义属性仍需要系统管理员配置后,各项目池管理员才可进行候选值的编辑。在网上有搜到一个付费插件:Redmine Project Specific Custom Field - Plugins - Redmine 功能更完善,可以直接在项目池维度创建自定义属性并编辑候选值,预算充足的朋友可以尝试。
11. redmine_work_wechat——版本:0.3.0
链接:tigergm/redmine_work_wechat
企业微信通知插件,当问题更新时可以推送信息到企业微信的内建应用,通知到问题的相关人员(与【notify_custom_users】插件配合)。推送的内容模板目前仍在研究中,目前通过修改推送模板加入了问题的最新状态的推送,但变更详情推送暂未能实现,如下图:
推送模板的修改地址为:
redmine根目录/plugins/redmine_work_wechat/lib/redmine_qy_wechat/patches/
corp_wechats_journals_patch.rb及issues_controller_patch.rb,在推送模板中对应位置加上{@issue.status}即可
@group_client.message.send_text(send_people_wx, "", "", app_id,"#{l(:msg_focus)} #{@issue.tracker} ##{@issue.id}: #{@issue.subject} #{l(:msg_by)} #{@issue.journals.last.user} #{l(:msg_updated)} #{@issue.status}")
12. select_to_select2——版本:0.1.0
链接:GitHub - sf-cola/select_to_select2: This is a repository of select to select 2 which is a redmine plugin.下拉列表的功能增强插件,支持搜索候选值及在多选场景下列出已选择的值。
* 该插件与【redmine_issue_templates】插件冲突,解决方法为修改
redmine根目录/plugins/select_to_select2/assets/javascripts/slecttoselect2main.js
第 53 行,增加 elements[i].id == 'issue_template'
else if (elements[i].id == 'available_c' || elements[i].id == 'issue_template' || elements[i].id == 'selected_c') {