【问题标题】:VSTS Update build via REST API通过 REST API 构建 VSTS 更新
【发布时间】:2020-03-30 09:17:47
【问题描述】:

我的目标是更新构建的池信息,以通过 REST API 将排队的构建/构建移动到另一个池中。我已经尝试了很多东西,但找不到任何文档 - 甚至无法实际设置哪些参数

我尝试使用以下代码完成此任务:

try
{
    build.Queue.Id = newQueue.Id;
    build.Queue.Name = newQueue.Name;
    build.Queue.Pool = new Microsoft.TeamFoundation.Build.WebApi.TaskAgentPoolReference();
    build.Queue.Pool.Name = newQueue.Pool.Name;
    build.Queue.Pool.Id = newQueue.Pool.Id;
    build.Queue.Pool.IsHosted = newQueue.Pool.IsHosted;
    var c = connection.GetBuildClient();
    var tf = await  c.UpdateBuildAsync(build);

    return true;
}
catch (Exception ex)
{
    return false;
}

(上面的代码很hacky,因为我试图让它工作)


我尝试过的事情:

1) 我尝试复制确切的 json 并通过原始补丁请求发送它,然后我收到一条回复说它已被修改。但是除了最后修改的用户更改为我之外,没有任何内容被修改

2) 我尝试通过 API 编辑请求正文中的 AgentsPoolQueue,但它不是我要更改的池 - 而是要链接到另一个构建的构建池信息。

【问题讨论】:

  • @HughLin-MSFT 我已经更新了问题,包括我什至尝试了原始补丁请求,并得到了有效的响应,但我尝试修改的实际 Azure 没有任何变化。
  • Azure Devops 不支持通过 rest api 更新排队生成的代理池。

标签: c# azure azure-devops azure-devops-rest-api tfs-sdk


【解决方案1】:

更新构建的池信息以移动排队的构建/构建 通过 REST API 进入另一个池

经过测试,Azure Devops 目前不支持通过 rest API 更新排队生成的代理池。构建运行后,无法修改其代理池信息。

虽然AgentPoolQueue记录在Update-buildrest api文档的请求正文中。但是实际使用的时候会发现返回状态是200 ok,但是build里面的pool信息实际上并没有更新。这在文档中没有说明,它确实会引起混淆。

代理池是在您运行管道时确定的。一旦构建运行,即使处于队列状态,也无法更改。您可以在我们的UserVoice 网站上提交您对该功能的请求,这是我们产品建议的主要论坛。更多的投票和cmets可以提高反馈的优先级。

目前只能取消排队的构建,运行新的构建,在新的构建中重新指定代理池。

【讨论】:

【解决方案2】:

您需要使用现有的 Build id 更新 Build

public async Task<Build> UpdateBuildAsync(Build build, string id)
        {
            var updateBuild = await Repository.GetBuildAsync(id);
            if (updateBuild != null)
            {
                updateBuild.Timestamp = DateTime.Now;
                updateBuild.Status = build.Status;
                updateBuild.Description = build.Description;
                if (build.Status == (int)BuildStatus.BuildQueued)
                {
                    updateBuild.VSTSBuildId = build.VSTSBuildId;
                }
                if (build.Status == (int)BuildStatus.DeploymentQueued)
                {
                    updateBuild.TemplateParameterUri = build.TemplateParameterUri;
                    updateBuild.TemplateUri = build.TemplateUri;
                }
                updateBuild.PkgURL = build.PkgURL;
                await Repository.UpdateBuildAsync(updateBuild);
                return await Repository.GetBuildAsync(id);
            }
            return updateBuild;
        }

【讨论】:

  • 嗨,这是我要更新的构建的池信息 - 而不是构建本身
  • 仍然需要传递我认为的 id
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2018-10-07
  • 2018-05-24
  • 1970-01-01
  • 1970-01-01
  • 2021-06-11
  • 1970-01-01
相关资源
最近更新 更多