BitBucket Cloud获取所有Pipelines API未返回下一页问题排查
问题详情
我使用以下Python代码获取BitBucket Cloud仓库的所有流水线:
def get_pipelines(token, repo): """Return list of pipelines for repo""" full_pipeline_list = [] next_page_url = f"https://api.bitbucket.org/2.0/repositories/{TEAM}/{repo}/pipelines/" headers = {"Accept": "application/json", "Authorization": f"Bearer {token}"} while next_page_url is not None: response = requests.request("GET", next_page_url, headers=headers, timeout=15) print(response) page_json = response.json() print(page_json) for repo in page_json["values"]: full_pipeline_list.append(repo) next_page_url = page_json.get("next", None) return full_pipeline_list
这段代码无法完整获取数据:API返回的结果中缺少next字段,当前响应显示总共有124条流水线记录,但仅返回10条(API最大支持每页100条),无法通过分页获取剩余数据。响应示例如下:
{ 'page': 1, 'pagelen': 10, 'values': [{...}], 'size': 124 }
根据BitBucket Pipelines API文档:
next string
若存在下一页则提供链接。集合的最后一页无此字段。请使用该链接导航结果集,请勿自行构造URL。
格式: uri
明明存在100+条记录,理论上应该生成下一页链接,请问是代码遗漏了配置还是API存在Bug?
解决思路与方案
1. 确认工作区ID正确性
代码中{TEAM}必须使用BitBucket的工作区ID(而非显示名称),若使用显示名称,API可能返回异常分页结构,导致不生成next链接。
2. 显式设置分页大小
默认每页仅返回10条,显式指定pagelen=100(API允许的最大值),既能减少分页次数,也能验证分页链接是否正常生成。修改初始请求URL:
next_page_url = f"https://api.bitbucket.org/2.0/repositories/{TEAM}/{repo}/pipelines/?pagelen=100"
3. 校验Token权限
确保Bearer token拥有仓库的repository:pipeline:read权限,权限不足时API可能隐藏后续分页数据,导致next字段缺失。
4. 添加HTTP状态码校验
代码中仅打印response但未校验状态码,若请求返回403(权限不足)、429(限流)等非200状态,响应JSON可能不包含正确分页字段。建议在获取响应JSON前添加校验:
response.raise_for_status()
5. 排查API服务问题
若以上配置均正确,可通过curl直接调用API验证:
curl -H "Authorization: Bearer YOUR_TOKEN" "https://api.bitbucket.org/2.0/repositories/YOUR_TEAM/YOUR_REPO/pipelines/?pagelen=100"
若curl返回结果仍无next字段,大概率是BitBucket API的临时故障,需联系Atlassian技术支持提交工单。
内容的提问来源于stack exchange,提问作者DenCowboy

