【问题标题】:How to show html report from Azure DevOps artifact in custom extension?如何在自定义扩展中显示来自 Azure DevOps 工件的 html 报告?
【发布时间】:2020-06-22 12:16:30
【问题描述】:

我使用以下语句将一些工件从我的构建管道存储到 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 在扩展中显示它。请帮忙。

【问题讨论】:

  • 或许你可以先下载文件,然后用代码读取。但它可能会受到浏览器的一些限制,请查看#1#2

标签: azure-devops azure-devops-rest-api azure-devops-extensions


【解决方案1】:

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

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

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

【讨论】:

  • 太棒了!感谢您在这里分享您的解决方法,您可以Accept it as an Answer,这样可以帮助遇到同样问题的其他社区成员,谢谢。
【解决方案2】:

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

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

虽然Client LibrariesWeb Extensions SDK(VSS.SDk).Net Client Library 支持大多数 Rest API ,它们都不支持直接访问文件的元数据。目前只能通过 API 直接访问 git repo 中文件的元数据。我们来看看区别

1.artifact中获取文件的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(使用BuildHttpClient类)

JS Web(VSS.SDK):getArtifactContentZip()

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

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.GetItemAsyncGitHttpClientBase.GetItemContentAsync (它们都支持获取单个项目的项目元数据和/或内容,还没有测试过哪个更好)

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 2021-10-29
    • 2019-04-16
    • 1970-01-01
    • 2012-01-21
    相关资源
    最近更新 更多