如何通过TeamCity REST API触发双VCS根指定版本的构建?
我需要通过TeamCity REST API触发一个包含2个VCS根的构建配置,要求为每个VCS根分别指定特定版本。官方文档只给出了单VCS根的示例,尝试用lastChanges字段传递多个变更ID时遇到400错误:
Responding with error, status code: 400 (Bad Request).
Details: jetbrains.buildServer.server.rest.errors.BadRequestException: Several non-personal changes are submitted, only one can be present
Invalid request. Please check the request URL and data are correct.
但在TeamCity UI中手动指定两个版本可以正常触发构建,使用的TeamCity版本为2022.04.3(build 108706)。
问题原因
lastChanges字段仅支持指定单个变更,无法用于多VCS根场景下的版本指定,这就是报错的核心原因。
正确解决方案
使用revisions字段替代lastChanges,为每个VCS根单独配置版本信息。请求体示例如下:
{ "buildType": { "id": "ExampleConfiguration" }, "revisions": { "revision": [ { "vcsRootId": "VCS_ROOT_1_ID", "revision": "abc123def456" }, { "vcsRootId": "VCS_ROOT_2_ID", "revision": "xyz789uvw012" } ] } }
字段说明
vcsRootId:对应VCS根的唯一ID,可从TeamCity UI的VCS根设置页面获取(路径:项目设置 → VCS根 → 查看对应根的ID)revision:需要指定的具体版本哈希值(Git/SVN等版本控制系统的提交ID)
如果需要同时指定分支,可在每个revision对象中添加branchName字段:
{ "vcsRootId": "VCS_ROOT_1_ID", "branchName": "refs/heads/release-v1.0", "revision": "abc123def456" }
验证逻辑
TeamCity UI中手动指定多VCS版本触发构建时,底层正是通过revisions字段传递版本信息,因此该方法与UI操作逻辑完全一致,可正常触发指定版本的构建。
内容的提问来源于stack exchange,提问作者Martin

