我正在将 azure 用于 Windows 应用程序,因此我实际上不需要使用 CD,因为这并不真正相关。我们最终计划迁移到云端,但目前情况并非如此。
我现在已经将我的 .net (c#) 构建作为构建管道运行,并且我有一个开发分支,该分支用于合并更改。我想要的是,当拉取请求成功完成时,测试人员能够拾取为特定错误或产品积压项目创建的构建工件。如果没有发布管道,这可能吗?我目前没有允许我创建发布管道的订阅。
最佳答案
How can I access the artefact from a pull request for which a build was run?
确实,正如Lucas所说,如果我们从pull request开始来解决这个问题,确实是很难的。但我们可以尝试逆向思维,从构建管道开始。
Azure DevOps 为我们提供了一些 predefined variables ,例如 Build.BuildId
、System.PullRequest.PullRequestId
。
因此,我们可以使用 REST API Pull Requests - Update在构建管道中使用工件链接更新注释。
PATCH https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/pullrequests/{pullRequestId}?api-version=5.1
由于当前构建是由拉取请求触发的,因此我们可以使用预定义变量System.PullRequest.PullRequestId
来直接获取pullRequestId
。
现在,我们只需要获取工件的链接,我们可以使用 Artifacts - Get获取工件信息:
GET https://dev.azure.com/{organization}/{project}/_apis/build/builds/{buildId}/artifacts?artifactName={artifactName}&api-version=4.1
我们可以通过预定义变量Build.BuildId
获取buildId
,然后我们就得到下载URL:
所以总结我的解决方案的想法是在构建管道中使用 REST API Pull Requests - Update 来更新 Pull 请求的注释,其中包含工件的下载路径。
注意:您还可以在构建管道的 REST API 任务中添加自定义条件:
and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'))
因此,通过此设置,只有拉取请求触发的构建才会执行此 REST API 任务。
希望这有帮助。
关于azure-devops - 如何从运行构建的拉取请求中访问工件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61897894/