VSTS 通过 REST 更新构建 API

VSTS Update build via REST API

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

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

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,但这不是我想要更改的池 - 但构建的池信息 link 到另一个构建相反。

您需要使用现有的构建 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;
        }

update the build's pool information to move the queued build/build into another pool via the REST API

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

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

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

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