如何使用GitHub GraphQL查询部署并将createdAt作为查询属性
GraphQL查询组织部署记录的优化方案
GitHub GraphQL API 目前没有提供组织维度的全局部署记录查询入口,deployments 连接也不支持 Pull Request 那样直接传入 createdAt 做日期范围筛选,你目前的遍历仓库思路是API限制下的唯一可行路径,但可以通过几个优化点把查询效率提上来,不用全量扫所有仓库的全量部署记录。
具体优化点
- 前置过滤无效仓库:第一步先拉取组织下的仓库列表,直接排除归档仓库(
isArchived: false)、部署总计数为0的仓库,只保留存在部署记录的活跃仓库,从源头减少需要查询的仓库量级。 - 调整单仓库查询逻辑:单仓库查询部署记录时,将排序规则设置为按
CREATED_AT倒序(从最新记录往历史旧记录翻),配合游标分页拉取数据,当拉取到的部署记录创建时间早于你设定的时间范围下限时,直接终止当前仓库的翻页流程,无需再拉取更早的无效历史数据。 - 批量请求降低开销:利用GraphQL原生支持的多字段并行查询特性,单次请求同时查询多个仓库的部署数据,不要单请求仅查询单个仓库,把HTTP请求的交互开销压到最低。
优化后的参考查询代码
{ organization(login: "my_organization") { repositories(first: 50, isArchived: false, orderBy: {field: UPDATED_AT, direction: DESC}) { edges { node { name deployments( first: 100, orderBy: {field: CREATED_AT, direction: DESC} # 翻页时传入上一页pageInfo返回的endCursor作为after参数即可 ) { pageInfo { endCursor hasNextPage } edges { node { state createdAt # 可按需补充部署环境、关联提交、触发人等其他业务需要的字段 } } } } } } } }
说明:你之前在Pull Request查询中使用的
createdAt:"2022-01-01..2022-01-31"范围筛选语法,是GitHub全局搜索索引为PR、Issue这类接入了全局搜索能力的对象提供的专属参数,部署记录目前未接入全局搜索索引,因此无法直接套用该写法实现日期过滤。
内容的提问来源于stack exchange,提问作者acoudouy
相关产品推荐
相关产品推荐

