如何查询GitLab Issue的迭代变更历史记录
GitLab Issue 迭代变更历史获取方案
一、API 查询方案
GitLab的资源变更历史统一归在系统笔记接口中,你之前未找到是因为迭代变更记录没有单独封装接口,而是存在Issue的事件/笔记列表中:
- 调用REST API 端点:
GET /projects/:id/issues/:issue_iid/notes,加上查询参数system=true过滤出系统自动生成的变更记录即可 - 返回结果里
body字段包含changed iteration to *Sprint X*的内容就是迭代变更记录,同时created_at字段对应变更操作的时间,author字段对应操作人 - 如果你用GraphQL,可以查询Issue对象下的
systemNotes字段,过滤action=iteration的记录即可拿到结构化的迭代变更前后值,不需要自行解析文本
二、数据库存储表对应
迭代变更的历史记录存在以下两个核心表:
notes表:所有系统笔记和用户评论都存在这张表,过滤system=true且noteable_type=Issue,同时note字段开头包含changed iteration to的记录就是你要的迭代变更流水,noteable_id对应Issue的ID,created_at是变更时间resource_iteration_events表:这是GitLab 14.0之后新增的专门存储迭代关联变更事件的表,数据更结构化,不需要解析文本,直接存储了issue_id、old_iteration_id、new_iteration_id、created_at、user_id字段,是查询全量迭代流转轨迹的最优数据源,查询示例:
SELECT issues.iid as issue_iid, old_it.name as old_sprint, new_it.name as new_sprint, resource_iteration_events.created_at as change_time, users.username as operator FROM resource_iteration_events LEFT JOIN issues ON resource_iteration_events.issue_id = issues.id LEFT JOIN iterations old_it ON resource_iteration_events.old_iteration_id = old_it.id LEFT JOIN iterations new_it ON resource_iteration_events.new_iteration_id = new_it.id LEFT JOIN users ON resource_iteration_events.user_id = users.id WHERE issues.iid = 目标工单IID AND issues.project_id = 对应项目ID ORDER BY change_time ASC;
注意事项
- 如果你的GitLab版本低于14.0,没有
resource_iteration_events表,只能从notes表解析系统笔记获取变更记录 - 调用REST API时如果返回数据量过大,可以加
per_page=100和分页参数拉取全量数据
内容的提问来源于stack exchange,提问作者megaflux
相关产品推荐
相关产品推荐

