Azure Microsoft.TeamFoundation.Build.WebApi获取由PR策略启动的生成状态

Azure Microsoft.TeamFoundation.Build.WebApi获取由PR策略启动的生成状态,azure,build,azure-devops,pull-request,Azure,Build,Azure Devops,Pull Request,在我们的管道中,我们以编程方式创建拉请求(PR)。合并到的分支上有一个启动生成的策略。此构建需要可变的时间。我需要查询构建状态,直到它完成(或长时间超时),以便我可以完成PR,并清理临时分支 我正试图找出如何获得PR启动的构建,以便我可以使用Microsoft.TeamFoundation.build.WebApi检查状态,但是BuildHttpClientBase.GetBuildAsync的所有重载都需要一个我没有的构建Id。我希望避免使用Azure Build REST API。有人知道我

在我们的管道中,我们以编程方式创建拉请求(PR)。合并到的分支上有一个启动生成的策略。此构建需要可变的时间。我需要查询构建状态,直到它完成(或长时间超时),以便我可以完成PR,并清理临时分支

我正试图找出如何获得PR启动的构建,以便我可以使用Microsoft.TeamFoundation.build.WebApi检查状态,但是BuildHttpClientBase.GetBuildAsync的所有重载都需要一个我没有的构建Id。我希望避免使用Azure Build REST API。有人知道我如何使用BuildHttpClientBase在没有构建ID的情况下让PR启动构建吗

不幸的是,文档没有提供很多关于功能的细节

回答你提出的问题: 查找为拉请求提供单一确定性构建id的调用似乎不是很容易获得

如前所述,您可以使用
BuldHttpClient.GetBuildsAsync()
根据分支、存储库、请求用户和原因筛选生成

根据需要传递的分支,在请求中添加
BuildReason.PullRequest
值可能是多余的

var pr=new GitPullRequest();//创建后收到的PR
var requestedFor=pr.CreatedBy.DisplayName;
var repo=pr.Repository.Id.ToString();
var branch=$“refs/pull/{pr.PullRequestId}/merge”;
var reason=BuildReason.PullRequest;
var buildClient=c.GetClient();
var blds=await buildClient.GetBuildsAsync(“myProject”,
branchName:branch,
repositoryId:repo,
requestedFor:requestedFor,
推理过滤器:推理,
存储类型:“TfsGit”);
在您的问题中,您提到希望pull请求的构建(单数),这意味着您只有一个构建定义充当策略门。此方法可以根据目标分支上的策略配置返回多个生成。然而,如果这是您的设置,那么您的问题将询问您等待完成PR的所有相关构建似乎是合乎逻辑的

我正在查看是否有更直接的方法通过策略获取正在运行的构建的id,但我无法按照以下要求正确格式化请求:

使用唯一标识拉请求的工件ID检索评估。要为拉取请求生成工件ID,请使用以下模板:

vstfs:///CodeReview/CodeReviewId/{projectId}/{pullRequestId}

即使使用GetById方法在PR上的
artifactId
字段中返回值,也会导致
不存在或没有访问权限
响应,因此如果其他人知道如何使用此方法,并且如果它给出了针对策略配置评估的准确构建ID,我很高兴听到这个消息


获得你真正想要的东西的另一种选择 听起来分支策略的唯一用途是在完成合并之前运行“门构建”

为什么不使用自动完成

名称-自动完成设置

类型-IdentityRef

说明-如果设置,则会为此拉取请求启用自动完成,这是启用该请求的标识

var me=new IdentityRef();//显然,您需要用实际值填充它
var prClient=connection.GetClient();
wait prClient.CreatePullRequestAsync(新的GitPullRequest()
{
CreatedBy=me,
AutoCompleteSetBy=me,
提交=新的GitCommitRef[0],
SourceRefName=“feature/myFeature”,
TargetRefName=“master”,
Title=“我的公关的一些好标题”
},
“myBestRepository”,
正确的);

如果您使用的是
Microsoft.TeamFoundation.Build.WebApi
您使用的是REST API。这些库只是使REST API交互更容易的SDK。这就是为什么我感到惊讶的原因,SDK似乎没有办法查询没有构建Id的构建,因为您似乎可以从API进行查询。哦,我看到您对我希望避免使用REST API的说法感到困惑。我的意思是,我不想自己构造RESTAPI调用,而是更喜欢使用SDK。首先,感谢您花时间回答。因此,虽然这是一个好主意,实际上这是我处理这个问题的方式(选择编写一个单独的程序来处理清理,而不担心监控构建),但它并没有解决最初的问题,所以我不认为我应该将其标记为答案。然而,我确实认为我找到了我最初想要的东西。BuildHttpClientBase.GetBuildsAsync(注意复数版本)。这实际上具有我从GetBuild中期望的可为空的查询参数,但没有找到。如果您想要此答案的分数,是否要使用GetBuildsAsync添加另一个答案?我觉得这是你应得的。使用此方法,我将能够根据分支、提交的用户以及可能的min和maxTime获得构建列表。这应该允许我在没有ID的情况下找到构建。不过我希望有一种方法可以在PR o上找到任何构建