如何在自定义扩展中显示来自 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 Libraries
像 Web 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(使用BuildHttpClient
class)
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"
这并不完全符合我的目的,但我能够在构建摘要中看到一个扩展选项卡,其中呈现了应该在工件中的文件:
我使用以下语句将构建管道中的一些工件存储到 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 Libraries
像 Web 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(使用BuildHttpClient
class)
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"
这并不完全符合我的目的,但我能够在构建摘要中看到一个扩展选项卡,其中呈现了应该在工件中的文件: