Azure devops 如何从运行构建的pull请求访问工件?

Azure devops 如何从运行构建的pull请求访问工件?,azure-devops,Azure Devops,我正在使用azure作为windows应用程序,因此我不需要深入到与CD无关的领域。我们最终计划转向云计算,但目前情况并非如此 现在,我的.net(c#)构建以构建管道的形式运行,并且我有一个开发分支,用于合并更改中的请求。我希望测试人员能够在拉请求成功完成时获取为特定bug或产品backlog项创建的构建工件。这在没有发布管道的情况下是可能的吗?我目前没有允许我创建发布管道的订阅。您定义的拉请求生成可以发布工件,请参阅 发布这些工件后,您的测试人员可以在构建运行页面上浏览/下载它们(单击标题p

我正在使用azure作为windows应用程序,因此我不需要深入到与CD无关的领域。我们最终计划转向云计算,但目前情况并非如此


现在,我的.net(c#)构建以构建管道的形式运行,并且我有一个开发分支,用于合并更改中的请求。我希望测试人员能够在拉请求成功完成时获取为特定bug或产品backlog项创建的构建工件。这在没有发布管道的情况下是可能的吗?我目前没有允许我创建发布管道的订阅。

您定义的拉请求生成可以发布工件,请参阅

发布这些工件后,您的测试人员可以在构建运行页面上浏览/下载它们(单击标题pa>“相关”>单击“#您发布的工件数量#已发布”)

或者,您可以向添加任务,但这需要更多配置

如何从运行构建的pull请求访问工件

事实上,正如卢卡斯所说,如果我们从拉请求开始解决这个问题,那真的很难。但我们可以尝试从构建管道开始反向思考

Azure devops为我们提供了一些,比如
Build.BuildId
System.PullRequest.PullRequestId

因此,我们可以在构建管道中使用restapi来更新注释和工件的链接

PATCH https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/pullrequests/{pullRequestId}?api-version=5.1
由于当前构建是由pull请求触发的,因此我们可以使用预定义变量
System.PullRequest.PullRequestId
直接获取
PullRequestId

现在,我们只需要获取工件的链接,我们可以使用获取工件信息:

GET https://dev.azure.com/{organization}/{project}/_apis/build/builds/{buildId}/artifacts?artifactName={artifactName}&api-version=4.1
我们可以通过预定义变量
Build.buildId
获得
buildId
,然后我们将获得下载URL:

因此,总结我的解决方案的想法是在构建管道中使用RESTAPI Pull Requests-Update来更新Pull请求的注释,其中包含工件的下载路径

PATCH https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/pullrequests/{pullRequestId}?api-version=5.1
注意:您还可以在生成管道中的REST API任务中添加自定义条件:

and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'))
因此,使用此设置,只有拉请求触发的构建才会执行此rest api任务


希望这能有所帮助。

谢谢。我想我真正想要的是产品待办事项中与工件的链接。您有一个到pull请求的链接,但是如何从该链接到正确的工件还不是很明显。我看到了,很抱歉误解。我不认为这种特性是现成的;你必须创建一个机器人,用工件链接在PR上发表评论。。。那将是一个很好的工作量。好的,谢谢,这听起来像是在这个阶段付出了太多的努力!那么,这是一个触发发布版本的典型过程,然后可以用于测试吗?谢谢你的回答,我很清楚,我试图做的不是预期的…@TimRutter,那么,你问的问题不是你想要什么?那你想要什么?如果这个问题与你想要的没有太大的不同,你可以更新你的问题,我会跟进,如果你想要的与问题完全不一致,你可以检查我的答案是否对你有帮助,你可以接受它作为答案,因此,它可以帮助其他社区成员谁得到同样的问题,我们可以存档此线程,谢谢。或者您可以关闭您的问题,然后打开一个新线程。@TimRutter,只是检查一下提供的信息是否有用。如果您需要进一步的帮助,请告诉我们。这些信息很有用,因为它让我意识到,它不值得进一步探究。谢谢你的帮助