更新团队基础 2015 API 中的构建定义

Posted

技术标签:

【中文标题】更新团队基础 2015 API 中的构建定义【英文标题】:Update build definition in team foundation 2015 API 【发布时间】:2016-01-13 13:05:37 【问题描述】:

我正忙于配置我们的新 TFS 2015 服务器(本地)并尝试让新的 vnext 构建正常工作。 我现在拥有的是一些额外的 powershell 脚本,它们增加了我的程序集的版本号。 它还通过调用 API 方法更改 TFS 中的内部版本号(请参阅tfs rest api)。我的 json 正文只发送新的内部版本号(例如 "buildNumber": "1.0.1.1234"),这工作正常。

现在我在版本的构建定义中添加了一些主要、次要和补丁版本变量。一旦构建完成,这应该被更新,所以我想做同样的事情,只需将更新 API 调用发送到相应的 builddefinition 端点。文档说修订号是强制性的,所以我已经添加了。其余的我只添加了更改的变量。 api 调用有效,但令人讨厌的是它会更新整个定义并清除我在 json 正文中未提供的所有其他设置。我还尝试首先通过 API 获取定义,更改变量的 json 值并将其发回,但也无法正常工作。

那么有人知道一个好的解决方案吗?

作为一种解决方法,我现在所做的是添加一个完全空的虚拟构建定义(例如“_ProjectVersion”),除了变量,我的构建任务现在使用该构建定义来获取最新的版本号并更新它们。所以 api 调用仍然清空了整个构建定义,但因为它只包含我不介意的变量。

【问题讨论】:

对于您的问题:“但令人讨厌的是它会更新整个定义并清除我没有在 json 正文中提供的所有其他设置”,您会得到哪些意想不到的变化?以及关于您的 json 文件的任何详细信息,我们可以用来尝试重现您的问题吗? 我使用了像 ' id: 2, revision:15, variables: MajorVersion: value:1, Minorversion: value: '1' ... ' 这样的 json 主体这只会将这些值保存在构建定义中,并删除我以前的所有设置(如所有构建步骤)。我尝试的另一种方法是首先对构建定义执行 GET。用我的值更改 json 响应,然后再把它放回去。然后我收到了类似触发器数组必须至少有一个值的异常消息。 @chrisism 我也遇到了和你一样的问题。您会期望如果您将 api 返还给它提供给您的确切内容,它会起作用,但显然不是。我也在努力让它工作,所以如果我管理它,我会更新你。 【参考方案1】:

我也在 powershell 中执行此操作,因为所有脚本都应该自动化并在 powershell 中完成。 我遇到的问题是,在 powershell 中管理时,获取现有 BuildDefinition 的 json 的 API 调用返回无效的 json。 例如,"@multipliers=[]; 将失败并显示“必须至少有一个值”,即使“json 验证器”可能报告为有效。正确的json是"multipliers": "[]",

【讨论】:

是的,这也是我遇到的问题。它看起来不像正确的 JSON。我不得不说,放弃尝试以正确的方式进行操作并使用空的 _AppVersion 构建模板对我来说仍然是完美的。因为我有一个夜间构建和一个发布构建,它们都需要这些版本号,只使用一个模板就足够了。我不在乎它每次都被完全拆除,因为我只需要访问这些变量。如果 MS 在构建 API 中添加一些特殊变量支持仍然会很好。

以上是关于更新团队基础 2015 API 中的构建定义的主要内容,如果未能解决你的问题,请参考以下文章

使用 C# 中的 azure devops API 在发布和构建定义中更新代理池

Spring Boot 2.x基础教程:使用Swagger2构建强大的API文档

TFS 2015 更新 3 Vnext 构建定义复制除父项目之外的所有工件

Visual Studio 2017 - 团队资源管理器构建“找不到页面”

TFS 2017 API;使用变量排队构建

如何从 Visual Studio 2015 更新 3 中的构建中排除 node_module 文件夹