我现在能够使用 DevOps REST API 从特定存储库中的特定分支识别给定 Azure DevOps 管道的最新运行,如我之前的问题的答案中所述。
因此,最新步骤是从 Pipelines / Runs GET 端点
检索
Run
数据结构,从而检索运行 ID。
看来我现在可以查询Pipelines / Artifacts GET端点来检索描述我的工件的
Artifact
数据结构。
为此,我发送以下 GET 请求:
https://dev.azure.com/<org>/<project>/_apis/pipelines/<pipeline-ID>/runs/<run-ID>/artifacts?api-version=7.1-preview.1&artifactName=<artifact-name>&$expand=signedContent
到目前为止,一切都很好 - 但是,我不确定如何实际将工件的内容下载到本地文件(或一组文件)。
Artifact GET 端点的结果是一个仅具有
name
和 url
属性的对象:
name : <artifact-name>
url : https://dev.azure.com/<org>/<some GUID>/_apis/pipelines/<pipeline-ID>/runs/<run-ID>/artifacts?artifactName=<artifact-name>
文档中出现的
signedContent
字段不存在(即使我已将 $expand=signedContent
参数添加到请求中)。
如何访问神器内容?
url
字段仅包含指向工件描述本身的指针,如文档中所述(“自引用 url”),而不是指向工件内容的指针。
如果与访问权限相关,在我用于 API 访问的 PAT 上,在 READ 级别授予以下权限:
(但即使我授予对 PAT 的完全访问权限,也没有任何变化。)
一个有趣的观察是,当我从基于 Web 的 DevOps UI 下载这些工件时,正在使用的 URL 如下所示:
https://dev.azure.com/<org>/_apis/resources/Containers/<integer-number>/<artifact-name>?itemPath=<artifact-name>%2F<path-in-artifact>
RunResources
数据结构(可以从运行的resources
属性中获取其实例)确实提供了containers
集合。不幸的是,与 repositories
不同,它从 Run GET 端点返回为 NULL。
第一步,你可以通过这个URL获取artifacts根目录的结构。
type 的值为:public/private/release
https://dev.azure.com/$my_org/$type/_apis/build/builds/$build_id/artifacts?api-version=6.0
返回如下:
{
"count": 7,
"value": [
{
"id": xxx,
"name": "metadata",
"source": "xxxxx",
"resource": {
"type": "PipelineArtifact",
"data": "xxxx",
"properties": {
"RootId": "xxxx",
"artifactsize": "14",
"HashType": "xxx",
"DomainId": "0"
},
"url": "https://dev.azure.com/$my_org/$Myproject_id/_apis/build/builds/$build_id/artifacts?artifactName=$FileorDirName&api-version=6.0",
"downloadUrl": "https://xxx?format=zip"
}
},
The remaining six directories.
]
然后可以继续递归请求url,得到深层目录结构。
或者直接使用downloadUrl下载目录下的所有文件
下载格式为zip。