问题描述
在 Azure DevOps 中,我想从管道构建中获取递归工件元素的列表。如果我不必下载整个工件根对象,那就太好了。有谁知道如何用当前的 API 做到这一点?
门户已在管道工件视图中支持此功能。您可以打开和浏览子工件,并可以下载。然而,该 API 似乎不支持此用例。
我找到了对该功能的请求,但我不确定它是否会很快实施。 https://developercommunity.visualstudio.com/idea/1300697/api-list-artifacts-enumerate-recursively-same-as-w.html
有没有其他人能够解决这个问题?
解决方法
这并未记录在案,但您可以使用与在 Azure DevOps 上完成的相同的 API 调用。所以会是
Post https://dev.azure.com/{organization1}/_apis/Contribution/HierarchyQuery/{projectId}?api-version=5.0-preview.1
就我而言是
https://dev.azure.com/thecodemanual/_apis/Contribution/HierarchyQuery/project/4fa6b279-3db9-4cb0-aab8-e06c2ad550b2?api-version=5.0-preview.1
具有与此类似的类似负载:
{
"contributionIds": [
"ms.vss-build-web.run-artifacts-data-provider"
],"dataProviderContext": {
"properties": {
"artifactId": 1158,"buildId": 7875,"sourcePage": {
"url": "https://dev.azure.com/thecodemanual/DevOps%20Manual/_build/results?buildId=7875&view=artifacts&pathAsName=false&type=publishedArtifacts","routeId": "ms.vss-build-web.ci-results-hub-route","routeValues": {
"project": "DevOps Manual","viewname": "build-results","controller": "ContributedPage","action": "Execute","serviceHost": "be1a2b52-5ed1-4713-8508-ed226307f634 (thecodemanual)"
}
}
}
}
}
所以你会得到这样的回应:
{
"dataProviderSharedData": {},"dataProviders": {
"ms.vss-web.component-data": {},"ms.vss-web.shared-data": null,"ms.vss-build-web.run-artifacts-data-provider": {
"buildId": 7875,"buildNumber": "20201114.2","definitionId": 72,"definitionName": "kmadof.hadar","items": [
{
"artifactId": 1158,"name": "/hadar.zip","sourcePath": "/hadar.zip","size": 1330975,"type": "file","items": null
},{
"artifactId": 1158,"name": "/scripts","sourcePath": "/scripts","size": 843,"type": "directory","items": [
{
"artifactId": 1158,"name": "/scripts/check-hadar-settings.ps1","sourcePath": "/scripts/check-hadar-settings.ps1","size": 336,"items": null
},{
"artifactId": 1158,"name": "/scripts/check-webapp-settings.ps1","sourcePath": "/scripts/check-webapp-settings.ps1","size": 507,"items": null
}
]
}
]
}
}
}
当然,您需要使用 PAT 令牌来授权您的请求。
,您可以尝试以下步骤:
- 执行 Artifacts API 的端点“Artifacts - Get Artifact”。从响应正文中,您可以像这样看到“
downloadUrl
”的值。
https://artprodcus3.artifacts.visualstudio.com/{organization_ID}/{project_ID}/_apis/artifact/{object_ID}/content?format=zip
此 URL 用于将整个工件下载 (GET
) 作为 ZIP 文件。
- 如果您想下载工件中的指定子文件夹或文件。
-
要下载工件中的指定子文件夹,您可以执行以下端点。
GET https://artprodcus3.artifacts.visualstudio.com/{organization_ID}/{project_ID}/_apis/artifact/{object_ID}/content?format=zip&subPath={/path/to/the/folder}
例如:
GET https://artprodcus3.artifacts.visualstudio.com/{organization_ID}/{project_ID}/_apis/artifact/{object_ID}/content?format=zip&subPath=/ef-tools
这将从您的工件“
ef-tools
”下载文件夹“drop
”及其内容作为 ZIP 文件。 -
要下载工件中的指定文件,您可以执行以下端点。
GET https://artprodcus3.artifacts.visualstudio.com/{organization_ID}/{project_ID}/_apis/artifact/{object_ID}/content?format=file&subPath={/path/to/the/file}
例如:
GET https://artprodcus3.artifacts.visualstudio.com/{organization_ID}/{project_ID}/_apis/artifact/{object_ID}/content?format=file&subPath=/ef-tools/migrate.exe
这将从您的工件“
ef-tools/migrate.exe
”下载文件“drop
”。