如何通过Azure DevOps Pipeline Run Artifacts REST API下载构件?
解决Azure DevOps流水线构件内容下载问题
方法一:使用Build Artifacts API获取直接下载地址
- 替换原有的Pipelines/Artifacts接口,调用Build构件详情API:
这里的GET https://dev.azure.com/<org>/<project>/_apis/build/builds/<run-ID>/artifacts?api-version=7.1-preview.5<run-ID>就是你从Pipelines/Runs接口获取的运行ID(流水线运行与Build ID为同一值)。 - 接口返回的每个
<Artifact>对象中,resource字段会包含关键信息:- 若构件为可打包下载的压缩包,
downloadUrl字段直接提供完整下载链接,请求该链接即可将构件内容保存到本地。 containerId字段对应Web UI下载URL中的整数编号,可用于构造自定义下载路径。
- 若构件为可打包下载的压缩包,
方法二:通过Container ID构造下载URL
拿到containerId后,根据需求构造不同的下载链接:
- 下载整个构件为ZIP包:
GET https://dev.azure.com/<org>/_apis/resources/Containers/<containerId>?itemPath=<artifact-name>&format=zip - 下载构件内的单个文件或子目录:
注意将GET https://dev.azure.com/<org>/_apis/resources/Containers/<containerId>/<artifact-name>?itemPath=<artifact-name>/<path-in-artifact><path-in-artifact>替换为构件内的实际文件/目录路径,URL中的特殊字符需做URL编码(比如/转义为%2F)。
关于signedContent字段缺失的说明
signedContent字段仅针对特定类型构件(如经过签名的包)返回,流水线生成的普通文件构件通常不会包含该字段。使用Build Artifacts API获取downloadUrl或containerId是更通用的解决方案。
补充:Run接口containers集合为空的原因
Pipelines/Runs接口返回的containers集合仅包含流水线运行过程中临时生成的容器资源,并不包含构件对应的存储容器。通过Build Artifacts API获取的containerId才是构件存储的正确标识。
内容的提问来源于stack exchange,提问作者F-H
相关产品推荐
相关产品推荐

