在Team Foundation 2015 API中更新构建定义

3
我现在忙于配置我们的新TFS 2015服务器(本地),并试图使新的vnext构建正常工作。 现在我有一些额外的PowerShell脚本,可以增加我的程序集版本号。它还通过调用API方法(请参见tfs rest api)更改了TFS中的buildnumber。我的json主体只发送新的构建编号(例如{"buildNumber": "1.0.1.1234"}),这很好地工作了。
现在,我已经在版本定义中添加了一些主要、次要和修补程序版本变量。一旦构建完成,就应该更新。因此,我认为做同样的事情,并只向相应的builddefinition端点发送更新API调用即可。文档说修订号是必需的,所以我添加了它。对于其他部分,我只添加了已更改的变量。 API调用有效,但讨厌的是,它将更新整个定义并清除我在json主体中未提供的所有其他设置。我也尝试通过API先获取定义,更改变量的json值,然后将其发送回来,但那也不正确。
那么,有人知道一个好的解决方案吗?
作为一种解决方法,我现在所做的是添加一个虚拟的构建定义(例如“_ProjectVersion”),除变量外完全为空白,然后我的构建任务现在使用该构建定义来获取最新的版本号并更新它们。因此,API调用仍会清空整个构建定义,但由于它只包含我的变量,所以我并不介意。

针对您的问题:“但讨厌的是,它会更新整个定义并清除我在json主体中未提供的所有其他设置”,您遇到了哪些意外更改?您的JSON文件有哪些详细信息,我们可以使用它来尝试重现您的问题? - Vicky - MSFT
我使用了一个类似于 '{ id: 2, revision:15, variables: { MajorVersion: {value:1}, Minorversion: { value: '1'} ... }' 的 json 主体。这只会保存构建定义中的这些值,并删除所有先前的设置(如所有构建步骤)。 我尝试的另一种方法是首先对构建定义进行 GET 操作。然后使用我的值更改 json 响应并将其再次 PUT 回去。然后我收到了异常消息,例如触发器数组必须至少有一个值。 - chrisism
@chrisism 我也遇到了和你一样的问题。如果你把API返回给你的东西原封不动地传回去,你会期望它能够工作,但显然并非如此。我也在尝试让它工作,如果我成功了,我会更新你的。 - Dewi Rees
1个回答

0

我也在使用PowerShell进行编写,因为所有的脚本都应该自动化并且使用PowerShell完成。
但是我遇到了一个问题,当在PowerShell中管理API调用以获取现有BuildDefinition的JSON时,返回的JSON无效。
例如,"@{multipliers=[];将会失败并显示“必须至少有一个值”,即使“JSON验证器”可能报告为有效。正确的JSON格式应该是{"multipliers": "[]",


是的,我也遇到了一些问题。它看起来不像正确的JSON。 我必须说,放弃试图按正确的方式处理,选择使用空的_AppVersion构建模板仍然非常完美。因为我有一个每晚构建和一个发布构建,两者都需要这些版本号,所以只使用一个模板就足够了。尽管它每次都被彻底摧毁,但我并不在乎,因为我只需要访问那些变量。 不过,如果微软在构建API中添加一些特殊变量支持,那就太好了。 - chrisism

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接