此插件通过 Jira Cloud REST API 收集 Jira 数据。然后,它从 Jira 数据中计算出各种工程指标并使之可视化。
指标名称 | 描述 |
---|---|
需求数 | 类型为 “需求” 的事务的数量 |
需求交付时间 | 类型为 “需求” 的事务的交付时间,即从创建到完成的时间 |
需求交付率 | 已交付的需求/所有需求的比率 |
需求粒度 | 一个“需求”类型事务的标准故事点 |
故障数量 | 类型为 “故障” 的事务数量 测试中发现的Bug。 |
故障修复时间 | 类型为 “故障” 的事务的修复时间 |
测试故障率(代码行) | 每1000行代码产生的 “故障” 数量 包括新增和删除的行数 |
测试故障数 | 类型为 “故障” 的事务数量 Incident在生产中运行时发现的问题。 |
质量事故数 | “Incident” 类型的事务的准备时间 |
质量事故率(代码行) | 每1000行代码产生的 Incident 数量 包括新增和删除的行数 |
插件运行前,你需要在 .env
文件中进行以下配置:
这是所有 Jira API 调用的基础设置。你可以在你所有的 Jira Urls 中看到它作为 Url 的开头。
例如:如果你看到 https://mydomain.atlassian.net/secure/RapidBoard.jspa?rapidView=999&projectKey=XXX
, 你需要在你的 .env
文件中设置 JIRA_ENDPOINT=https://mydomain.atlassian.net
https://id.atlassian.com/manage-profile/security/api-tokens
echo -n <jira login email>:<jira token> | base64
命令对登录的电子邮件进行编码不同公司可能使用不同的事务类型来表示他们的 需求/故障/事故,类型映射允许 Devlake 识别你在 Jira 类型方面的具体设置。Devlake 支持 3 种不同的标准状态类型:
需求(Requirement)
故障(Bug)
事故(Incident)
例如,假设我们使用 故事
和 任务
来表示需求,用 客户投诉
表示事故,用 QABug
表示故障。我们要做的是在运行 Devlake 之前在 .env
文件下设置环境变量:
# JIRA_ISSUE_TYPE_MAPPING=<STANDARD_TYPE>:<YOUR_TYPE_1>,<YOUR_TYPE_2>;.... JIRA_ISSUE_TYPE_MAPPING=Requirement:故事,任务;Incident:客户投诉;Bug:QABug;
事务类型映射对于一些指标来说是至关重要的,比如需求数,请确保正确映射你的自定义类型。
Jira 是高度可定制的,不同公司可能使用不同的状态来表示一个事务是否被解决。一个公司可能将这个状态命名为 “Done”,而其他公司可能将其命名为 “Finished”。
为了正确的收集事务的生命周期信息,你必须将自己使用的事务状态映射到 Devlake 的标准状态,Devlake 支持 2 种标准状态:
Resolved
: 事务完成或解决Rejected
: 事务终止或取消例如,假设我们
Bug
类型的事务:使用 已修复
表示 “Resolved”,用 拒绝
和 无法复现
表示 “Rejected”;Incident
类型的事务:使用 已修复
表示 “Resolved”,用 拒绝
表示 “Rejected”;Story
类型的事务:使用 已完成
表示 “Resolved”,用 推迟
表示 “Rejected”; 我们要做的是在运行 Devlake 之前在 .env
文件下设置环境变量:#JIRA_ISSUE_<YOUR_TYPE>_STATUS_MAPPING=<STANDARD_STATUS>:<YOUR_STATUS>;... JIRA_ISSUE_BUG_STATUS_MAPPING=Resolved:已修复;Rejected:拒绝,无法复现 JIRA_ISSUE_INCIDENT_STATUS_MAPPING=Resolved:已修复;Rejected:拒绝 JIRA_ISSUE_STORY_STATUS_MAPPING=Resolved:已完成;Rejected:推迟
状态映射对于像 需求前置时间
和 故障/事故修复时间
这样的指标至关重要,因为我们需要通过需求/故障/事故的解决时间来计算。
此设置适用于配置 JIRA_ISSUE_EPIC_KEY_FIELD
和 JIRA_ISSUE_STORYPOINT_FIELD
JIRA_ISSUE_EPIC_KEY_FIELD
表示一个 Jira 事务所属的 史诗
的 Key,比如 EE-234JIRA_ISSUE_STORYPOINT_FIELD
表示 Jira 事务的故事点。配置此字段是为了将你本地的一个完整的设置形如:
JIRA_ISSUE_EPIC_KEY_FIELD=customfield_10024 JIRA_ISSUE_STORYPOINT_FIELD=customfield_10026
请遵循此指南,如何查找 Jira 的自定义字段的ID?
如果你并未使用故事点,而是使用 预计时间
等字段来表示需求粒度,你可以将上方的JIRA_ISSUE_STORYPOINT_FIELD
设置为 预计时间
对应的自定义字段,然后将 JIRA_ISSUE_STORYPOINT_COEFFICIENT
设置为默认值 1 以外的值。
我们使用的标准故事点字段 std_story_point
的值 = 预计时间 * JIRA_ISSUE_STORYPOINT_COEFFICIENT
一般情况下,1 个标准故事点为半天,也就是 4 小时,因此当你使用 预计时间
作为需求粒度的字段,并以小时为单位,那么可以将 JIRA_ISSUE_STORYPOINT_COEFFICIENT
设置为 0.25
你可以向 /task
发起一个POST请求来触发数据收集。由于我们通过 Jira 来决定收集的数据范畴,因此需要在请求里带上 Jira board id
注意:此请求会在收集全部数据时自动触发,你无需单独执行这一请求,也不需要在 .env
文件中设置这个。
curl -XPOST 'localhost:8080/task' \ -H 'Content-Type: application/json' \ -d '[[{ "plugin": "jira", "options": { "boardId": 8 } }]]'
?rapidView=
中获取面板 ID例如: 对于 https://<your_jira_endpoint>/secure/RapidBoard.jspa?rapidView=39
,面板的ID是39