GitLab能否通过单次API调用获取群组及子组、项目的全部成员
GitLab API 递归拉取群组成员相关说明
核心结论
目前GitLab原生不支持单次API调用同时获取指定群组、其所有下属子组、所有下属项目的全部用户列表,但官方提供了参数可以大幅简化查询逻辑,无需手动递归遍历所有子组:
简化查询方案
方案1:仅需获取群组+所有子组的直接成员(GitLab 13.11及以上版本支持)
在原有群组成员查询接口中添加include_descendant_groups=true参数即可,接口会自动返回当前群组 + 所有层级子组的直接成员,且自动去重,无需手动遍历子组:
curl -H "PRIVATE-TOKEN: xxxx" -k "https://gitlab.xxxx/api/v4/groups/319/members?per_page=100&page=1&include_descendant_groups=true"
方案2:需要同时获取下属项目的成员
没有原生参数支持同时拉取项目成员,但可以通过两步操作大幅简化逻辑:
- 单次调用群组项目查询接口,添加
include_subgroups=true参数,直接拿到该群组下所有层级子组的全部项目列表,无需递归遍历子组查项目:
curl -H "PRIVATE-TOKEN: xxxx" -k "https://gitlab.xxxx/api/v4/groups/319/projects?per_page=100&page=1&include_subgroups=true"
- 遍历上一步拿到的项目ID列表,逐个调用项目成员接口拉取成员即可
方案3:旗舰版专属方案
如果你使用的是GitLab 14.10及以上的旗舰版本,可以直接调用billable_members接口,单次返回所有拥有该群组下任意资源(子组、项目)访问权限的用户,最符合需求:
curl -H "PRIVATE-TOKEN: xxxx" -k "https://gitlab.xxxx/api/v4/groups/319/billable_members?per_page=100&page=1"
补充注意事项
- 所有列表类接口都需要处理分页逻辑,
per_page参数最大支持100,返回结果超过100条时需要修改page参数遍历所有分页 - 所有接口默认返回的是直接分配权限的成员,不包含继承自更高层级群组的成员,如果需要包含继承的成员,可以把接口路径中的
members改成members/all
内容的提问来源于stack exchange,提问作者Loïc Madiès
相关产品推荐
相关产品推荐

