如何限制TeamCity REST API的changes输出至指定分支?
问题
我通过以下请求地址查询某VCS提交之后的变更:https://teamcity.mycompany.com/app/rest/changes?locator=buildType:(id:myCfgId),sinceChange(version:mySHA)&fields=change(*)
该请求会返回mySHA提交后所有追踪分支的变更,但ChangeLocator参数本身不支持分支筛选,请问如何将结果限定到特定分支?
解决方法
因为ChangeLocator没有直接的分支筛选参数,你可以用下面两种方式实现:
方法1:通过分支构建关联筛选变更
- 先获取特定分支下、在目标SHA之后的所有构建ID:
https://teamcity.mycompany.com/app/rest/builds?locator=buildType:(id:myCfgId),branch:(name:myBranchName),sinceChange(version:mySHA)&fields=build(id) - 针对每个返回的构建ID,单独请求该构建对应的变更列表:
https://teamcity.mycompany.com/app/rest/builds/id:{buildId}/changes?fields=change(*) - 把这些变更结果合并去重,就能得到目标分支在mySHA之后的所有变更。
方法2:客户端本地过滤变更
- 先执行你原本的请求,拿到所有分支在mySHA之后的变更数据。
- 遍历每条变更,检查其中的
branchName字段(如果API返回该字段),只保留与目标分支名称匹配的条目。要是返回的变更里没有直接的分支信息,可以通过变更关联的构建数据来判断所属分支,或者解析变更对象里的分支相关链接字段。
内容的提问来源于stack exchange,提问作者Andrey Kuznetsov
相关产品推荐
相关产品推荐

