我的目标是更新构建的池信息,以通过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,但这不是我要更改的池-而是构建的池信息链接到另一个构建。
答案 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;
}