如何从 Pipeline Run Artifacts REST API 下载工件?

问题描述 投票:0回答:1

我现在能够使用 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。

azure-devops azure-devops-rest-api
1个回答
0
投票

第一步,你可以通过这个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。

© www.soinside.com 2019 - 2024. All rights reserved.