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 网站上提交对此功能的请求,该网站是我们提供产品建议的主要论坛。更多的投票和评论可以增加反馈的优先级。
目前只能取消排队的构建,运行个新构建,在新构建中重新指定代理池。
我的目标是更新构建的池信息以通过 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 网站上提交对此功能的请求,该网站是我们提供产品建议的主要论坛。更多的投票和评论可以增加反馈的优先级。
目前只能取消排队的构建,运行个新构建,在新构建中重新指定代理池。