通过REST API构建VSTS更新

时间:2019-12-05 12:28:37

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

我的目标是更新构建的池信息,以通过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;
}

(上面的代码在我尝试使其工作时非常不可靠)


我尝试过的事情:

1)我尝试复制确切的json并通过原始补丁请求发送它,然后得到响应说它已被修改。但是除了最后修改的用户更改为我之外,NOTHING均已修改

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

2 个答案:

答案 0 :(得分:1)

  

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

测试之后,Azure Devops当前不支持通过其余API更新排队的构建的代理池。一旦运行构建,便无法修改其代理程序池信息。

尽管AgentPoolQueue记录在Update-build rest api文档的请求正文中。但是,当您实际使用它时,您会发现返回状态为200 ok,但是该构建中的池信息尚未实际更新。文档中未对此进行说明,但确实会造成混淆。

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

目前,您只能取消排队的版本,运行新版本并在新版本中重新指定代理池。

答案 1 :(得分:0)

您需要使用现有的内部版本ID更新内部版本

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;
        }