如何在自定义扩展中显示来自 Azure DevOps 工件的 html 报告?

How to show html report from Azure DevOps artifact in custom extension?

我使用以下语句将构建管道中的一些工件存储到 Artifacts 文件夹:

Write-Host "##vso[artifact.upload containerfolder=testresult;artifactname=worksoftresult;]C:\JSONOutput\finalJSON.json"

现在我想从我想创建的 Azure DevOps 扩展访问这个特定的 json 文件。像下面的代码一样给我扩展中的当前登录用户:

document.getElementById("name").innerText = VSS.getWebContext().user.name;

有没有办法从 VSS.SDK 访问当前构建的工件?如果没有,如何访问工件?我已尝试使用 GetAtrifact rest API,但它尝试下载文件:

https://dev.azure.com/XXXX/XXXXX/_apis/build/builds/1166/artifacts?artifactName=testResult&fileName=finalJSON.json&api-version=5.1&%24format=json

我不想下载 json 文件,但我希望 json 在扩展中显示它。请帮忙。

I dont want to download the json file but I want the json to show it in the extension.

据我所知,我们没有 API 可以直接访问工件中一个文件的内容。

Client LibrariesWeb Extensions SDK(VSS.SDk).Net Client Library support most Rest API ,其中 none 支持直接访问文件的元数据。目前只能通过 API 直接访问 git 存储库中文件的元数据。让我们检查一下差异:

1.API获取神器中的文件:

Rest API: GET https://dev.azure.com/{organization}/{project}/_apis/build/builds/{buildId}/artifacts?artifactName={artifactName}&fileId={fileId}&fileName={fileName}&api-version=5.1(你用的那个)

C# client:BuildHttpClientBase.GetArtifactContentZipAsync Method(使用BuildHttpClientclass)

JS Web(VSS.SDK): getArtifactContentZip()

2.API 获取 git repo 中的文件元数据:

Rest API: GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/items?path={path}&api-version=5.1 如果 includeContentMetadata 设置为 True,则支持获取元数据。

C# client: GitHttpClientBase.GetItemAsync or GitHttpClientBase.GetItemContentAsync(他们都支持获取单个项目的项目元数据and/or内容,还没有测试过哪个更好)

JS Web(VSS.SDK): getItem()getItemContent() 。 (获取单个项目的项目元数据 and/or 内容。)

总结一下:您真正想要的是访问元数据,以便您可以直接访问文件中的内容。但是目前 不支持 与 Artifact 相关的 api 来做这样的工作。所以恐怕答案是否定的,当前版本 API.

不支持您想要的

作为替代解决方法,我建议您可以在我们的 User Voice 论坛中提交功能请求 here 以分享您的反馈。如果获得足够的选票,产品团队会考虑您的想法。

为了回答我的问题,由于我无法直接在扩展中显示工件,我选择(暂时)使用以下代码将其上传到 Task.UploadSummary:

Write-Host "##vso[task.uploadsummary]$(Build.ArtifactStagingDirectory)\output.md"

这并不完全符合我的目的,但我能够在构建摘要中看到一个扩展选项卡,其中呈现了应该在工件中的文件: