gpt4 book ai didi

tfs - BuildHTTPClient 无法获得构建定义步骤?

转载 作者:行者123 更新时间:2023-12-04 15:45:53 25 4
gpt4 key购买 nike

我们使用 BuildHTTPClient 以编程方式创建构建定义的副本,更新内存中的变量,然后将更新后的对象保存为新定义。

我正在使用 Microsoft.TeamFoundation.Build2.WebApi.BuildHTTPClient 16.141。 TFS 版本为 17 update 3 (rest api 3.x)

这是与 https://serverfault.com/questions/799607/tfs-buildhttpclient-updatedefinition-c-example 类似的问题但我试图继续使用 BuildHttpClient 库,而不是直接使用 RestAPI。

问题是 Steps 列表和其他属性总是空的,即使我们在构建定义中有它们。

更新作为答案发布在下面

在查看下面的@Daniel Frosts 尝试后,我们开始考虑使用旧版本的 NuGet 包。令人惊讶的是,支持的版本 15.131.1 不支持这一点,但我们发现 version="15.112.0-preview"支持。
在回滚我们所有的 Dll 以匹配该版本后,在保存构建的新副本时克隆了这些步骤。

当您使用这个包时,我们使用的所有代码示例都有效。我们无法让 Daniel 的示例工作,但 Dll 的版本是问题所在。

我们需要创建一个GitHub问题并报告给MS

第一次尝试 - GetDefinitionAsync:

VssConnection connection = new VssConnection(DefinitionTypesDTO.serverUrl, new VssCredentials());
BuildHttpClient bdClient = connection.GetClient<BuildHttpClient>();

Task <BuildDefinition> resultDef = bdClient.GetDefinitionAsync(DefinitionTypesDTO.teamProjectName, buildID);
resultDef.Wait();
BuildDefinition updatedDefinition = UpdateBuildDefinitionValues(resultDef.Result, dr, defName);
updatedTask = bdClient.CreateDefinitionAsync(updatedDefinition, DefinitionTypesDTO.teamProjectName);

更新适用于变量,我们可以将更新的定义保存回 TFS,但新创建的构建定义中没有任何任务。当我们查看从 GetDefinitionAsync 返回的对象时,我们看到 Steps 列表为空。看起来 GetDefinitionAsync 只是没有获得完整的对象。

第二次尝试 - 特定修订版:
int rev = 9;
Task <BuildDefinition> resultDef = bdClient.GetDefinitionAsync(DefinitionTypesDTO.teamProjectName, buildID, revision: rev);
resultDef.Wait();
BuildDefinition updatedDefinition = UpdateBuildDefinitionValues(resultDef.Result, dr, defName);

根据 SteveSims 的帖子,我们认为我们没有得到正确的修订。所以我们在请求中添加了修订。我在正确的修订中看到了同样的问题。与 SteveSims 帖子类似,我可以在浏览器中打开 DefinitionURL,我看到任务在浏览器中的 JSON 中,但 BuildDefinition 对象没有填充它们。

第三次尝试 - GetFullDefinition:

所以然后我想尝试 getFullDefinition,也许这就是“完整”的意思,当然没有关于这些库的任何文档,我不知道。
var task2 = bdClient.GetFullDefinitionsAsync(DefinitionTypesDTO.teamProjectName, "MyBuildDefName","$/","TfsVersionControl");
task2.Wait();

仍然没有运气,即使我们在构建定义中有步骤,步骤列表也始终为空。

第四次尝试 - 另存为模板
var task2 = bdClient.GetTemplateAsync DefinitionTypesDTO.teamProjectName, "1_Batch_Dev");
task2.Wait();

我尝试将构建定义保存为模板。所以在 Web UI 中我选择了“另存为模板”,仍然没有步骤。

第五次尝试:使用 SteveSims 帖子中提到的 URL:

最后我说好的,我会尝试使用 SteveSims 使用的解决方案,使用 webclient 从 URL 获取对象。
var client = new WebClient();
client.UseDefaultCredentials = true;
var json = client.DownloadString(LastDefinitionUrl);

//Convert the JSON to an actual builddefinition
BuildDefinition result = JsonConvert.DeserializeObject<BuildDefinition>(json);

这也不起作用。构建定义步骤为空。即使在查看 Json 对象(var json)时,我也会看到这些步骤。但是对象没有加载它们。

我看过这篇文章,它似乎将步骤添加到基本定义中,我已经尝试过,但老实说,我在理解他如何通过 NuGet 引用 BuildDefinition 对象时遇到了问题?

https://dennisdel.com/blog/getting-build-steps-with-visual-studio-team-services-.net-api/

最佳答案

在查看下面的@Daniel Frosts 尝试后,我们开始考虑使用旧版本的 NuGet 包。令人惊讶的是,受支持的版本 15.131.1 不支持这一点,但我们发现 version="15.112.0-preview"支持。
在回滚我们所有的 Dll 以匹配该版本后,在保存构建的新副本时克隆了这些步骤。

当您使用这个包时,上面的所有代码示例都可以工作。我们无法让 Daniel 的示例工作,但我们没有努力,因为我们有工作代码。

我们需要为此创建一个 GitHub 问题。

关于tfs - BuildHTTPClient 无法获得构建定义步骤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52894176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com